Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/12/2011, 02:00
Avatar de davidcr
davidcr
 
Fecha de Ingreso: septiembre-2004
Ubicación: Cartago Costa Rica
Mensajes: 95
Antigüedad: 19 años, 6 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... ????