Foros del Web » Programando para Internet » PHP »

Curl hacer GET y POST en una misma llamada

Estas en el tema de Curl hacer GET y POST en una misma llamada en el foro de PHP en Foros del Web. Buen dia, solicito su ayuda en un problema que me tiene desvelado hace semanas... se trata de lo siguiente. Paso 1: Curl va a un ...
  #1 (permalink)  
Antiguo 28/12/2011, 02:00
Avatar de davidcr  
Fecha de Ingreso: septiembre-2004
Ubicación: Cartago Costa Rica
Mensajes: 95
Antigüedad: 20 años, 2 meses
Puntos: 7
Sonrisa Curl hacer GET y POST en una misma llamada

Buen dia, solicito su ayuda en un problema que me tiene desvelado hace semanas...

se trata de lo siguiente.

Paso 1: Curl va a un sitio web recoge los primeros datos que necesito. Ningun problema.

Paso2: Al visitar la primera pagina que funciona con .NET genera unos valores EventValidation y ViewState que necesito pasarlos a la segunda pagina tal cuales, para mantener esa sesion activa.

Ahi radica el problema. ¿Como puedo hacer una consulta Curl, validar datos y volver a enviar datos POST sin que se altere la session de la primera pagina... no se si me entienden.

Pongo un ej, de lo que tengo


Código PHP:
$ch curl_init();
curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
curl_setopt($chCURLOPT_COOKIESESSIONTRUE);
curl_setopt($chCURLOPT_HEADER0);
curl_setopt($chCURLOPT_COOKIEFILE"cookiefile");
curl_setopt($chCURLOPT_COOKIEJAR"cookiefile");
curl_setopt($chCURLOPT_COOKIEsession_name() . '=' session_id());
curl_setopt($chCURLOPT_FOLLOWLOCATION1);

curl_setopt($chCURLOPT_URL'http://www.pagina1.com');
$result1 curl_exec($ch);


 
$Textohtml$result1;

# *** Parsear el html para extraer el texto del Capcha  ****

$Paso1 explode("\r"$Textohtml);
$Preresult explode("/"$Paso1[95]);

$TextoCapchasubstr($Preresult[1], 0,6);

  echo 
$TextoCapcha;


 
# ***** OBTENER EL EVENT VALIDATION STRING *********

$Preresult explode("\""$Paso1[19]);

 
$EventValidation$Preresult[7];

  
// echo $EventValidation;

# ***************************************************

# ********* OBTENER EL VIEW STATE STRING ************

$Preresult explode("\""$Paso1[10]);

 
$ViewState$Preresult[7];

 
// echo $ViewState;

# ***************************************************


# **********  HACER EL ENVIO DE LOS DATOS POR POST **********************

curl_setopt ($chCURLOPT_POST1);
curl_setopt ($chCURLOPT_POSTFIELDS"txtcampo1=123456789&captcha=".$TextoCapcha."&__EVENTTARGET=''&__EVENTARGUMENT=''&__VIEWSTATE=".$ViewState."&__EVENTVALIDATION=".$EventValidation."&Button1=Continuar");
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_RETURNTRANSFER1);

curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
curl_setopt($chCURLOPT_COOKIESESSIONTRUE);
curl_setopt($chCURLOPT_HEADER0);
curl_setopt($chCURLOPT_COOKIEFILE"cookiefile");
curl_setopt($chCURLOPT_COOKIEJAR"cookiefile");
curl_setopt($chCURLOPT_COOKIEsession_name() . '=' session_id());

curl_setopt($chCURLOPT_URL'http://www.pagina2.com');
echo 
curl_exec($ch);

curl_close($ch); 


El resultado que me da es un error de Cookies pero las mismas las establece la segunda pagina cuando todo es correcto, esto ya lo he verificado en el navegador. Por si acaso ya tambien revise por permisos en la carpeta de las cookies y estan 777 en la carpeta donde hago las pruebas.

Alguna idea de como lograr lo que quiero... ????
  #2 (permalink)  
Antiguo 28/12/2011, 10:40
Avatar de ElSiniestro  
Fecha de Ingreso: diciembre-2011
Ubicación: Ibagué
Mensajes: 115
Antigüedad: 13 años
Puntos: 23
Respuesta: Curl hacer GET y POST en una misma llamada

¿has probado con un if de control?

algo como if(isset($_COOKIE)) {//tal procedimiento} else {registre cookie}
  #3 (permalink)  
Antiguo 28/12/2011, 11:39
 
Fecha de Ingreso: noviembre-2011
Mensajes: 69
Antigüedad: 13 años
Puntos: 0
Respuesta: Curl hacer GET y POST en una misma llamada

Hola amigo como estas? estuve viendo tu post de cURL te hago una pregunta: Tenes idea de como ayudarme para hacer en mi web el envio de sms? la idea es usar cURL para obtener el captcha y el problema que tenga es que la imagen es aleatoria y otra cosa seria reenviar todos los campos a la pagina de personal.
Espero puedas ayudarme saludos!!
  #4 (permalink)  
Antiguo 28/12/2011, 22:45
Avatar de davidcr  
Fecha de Ingreso: septiembre-2004
Ubicación: Cartago Costa Rica
Mensajes: 95
Antigüedad: 20 años, 2 meses
Puntos: 7
Respuesta: Curl hacer GET y POST en una misma llamada

gracias por sus respuestas, tal parece que para empezar el asunto esta en que curl no esta guardando las cookies.. es decir le especifico una ruta para cookies con todos sus permisos respectivos y el fichero nunca se crea siquiera por 0bytes no se que sucede pero Curl no esta haciendo su trabajo a pesar de que he puesto las varibles y todo correcto.

Ya me esta volviendo loco la situacion, he probado el script en php sobre windows/linux con el mismo resultado

¿Alguien tendrá idea de por que no se guardan las cookies?? cual es el secreto??
  #5 (permalink)  
Antiguo 29/12/2011, 03:45
Avatar de davidcr  
Fecha de Ingreso: septiembre-2004
Ubicación: Cartago Costa Rica
Mensajes: 95
Antigüedad: 20 años, 2 meses
Puntos: 7
Respuesta: Curl hacer GET y POST en una misma llamada

Quiero decir que no he podido solucionar el problema que tenia con Curl pero encontre esta clase PHP - Advanced HTTP Client lo hice funcionar en apenas unos minutos para el resultado que deseaba con rotundo exito.. recomendada!!

La clase maneja y acepta las cookies sin ninguna configuracion especial. Es perfecta para quien no desee una manipulacion extensiva de los recursos y peticiones HTTP solamente GetHttp body y enviar peticiones GET y POST incluyendo las cookies.

Pero si desean algo muuucho mas poderoso y funcional les recomiendo http://www.phpclasses.org/package/3-...ite-pages.html eso si, advierto su uso parece simple y viene muy bien comentado, pero no es para novatos, me fue dificil su compresion incluso para mí.. pero no dejo de recomendarla, esta muy bien lograda y su autor responde en el foro del mismo sitio.

Etiquetas: curl, html, llamada, post
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:20.