Foros del Web » Programando para Internet » PHP »

Duda con CURL y mantener la sesion

Estas en el tema de Duda con CURL y mantener la sesion en el foro de PHP en Foros del Web. Buenas, me gustaría saber si existe alguna manera de mantener la sesión abierta cuando visito las paginas con curl y el script finaliza. Es decir, ...
  #1 (permalink)  
Antiguo 29/07/2010, 04:31
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Duda con CURL y mantener la sesion

Buenas, me gustaría saber si existe alguna manera de mantener la sesión abierta cuando visito las paginas con curl y el script finaliza.

Es decir, el problema que encuentro es que me conecto a una página web que tiene usuario y contraseña (ahí ya empleo la primera conexión curl), bien.
Luego más adelante en el script, me muevo por la web a otra página (segunda conexión curl) obtengo la web y finaliza el script, bien.

Sin embargo, si el usuario quiere saltar a otra página de la web que estoy leyendo, necesito realizar la petición completa de login y pass (otra vez, paso 1) y luego saltar a la página que el usuario quiere ver.

Me pregunto si existe alguna forma de guardar esta sesión para que la primera vez que ejecuto el script, si que tenga que hacer 2 conexiones con curl, pero las siguientes no haga falta hacer el login y pass...

Estoy utilizando el CURLOPT_COOKIEJAR y el CURLOPT_COOKIEFILE pero eso solo me sirve para moverme entre paginas.
Cuando el script finaliza y quiero mostrar otra página de la web, no me deja, ya que me lleva a la página de login y me dice que no estoy autenticado.

¿Sabéis si esto es así o se puede cambiar?

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 29/07/2010, 07:26
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Duda con CURL y mantener la sesion

Creo que curl proporciona una opción para guardar fisicamente las cookies, y con esto te valdria para futuras conexiones, lees ese fichero que crea y supongo que te mantiene las cookies que hayas obtenido en conexiones anteriores.
  #3 (permalink)  
Antiguo 29/07/2010, 09:10
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Duda con CURL y mantener la sesion

Cita:
Iniciado por djrony Ver Mensaje
Creo que curl proporciona una opción para guardar fisicamente las cookies, y con esto te valdria para futuras conexiones, lees ese fichero que crea y supongo que te mantiene las cookies que hayas obtenido en conexiones anteriores.
Pero eso no es lo que hace ya CURLOPT_COOKIEJAR y el CURLOPT_COOKIEFILE

De esa forma no funciona para lo que digo. Ya que parece que al finalizar el script se perdiese la sesión curl... :S
  #4 (permalink)  
Antiguo 29/07/2010, 09:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con CURL y mantener la sesion

Lo que pasa es que al finalizar el script se cierra la conexión cURL y por ende cierra todas sus variables y limpia todo, es un comportamiento natural del script, tendrías tu que leer esas cookies, guardarlas tu mismo en otro archivo y volverlas a inyectar.

Por defecto cURL no es persistente en tus requests, solo en los requests que hace bajo una misma instancia.

Saludos.
  #5 (permalink)  
Antiguo 29/07/2010, 11:44
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Duda con CURL y mantener la sesion

Cita:
Iniciado por GatorV Ver Mensaje
Lo que pasa es que al finalizar el script se cierra la conexión cURL y por ende cierra todas sus variables y limpia todo, es un comportamiento natural del script, tendrías tu que leer esas cookies, guardarlas tu mismo en otro archivo y volverlas a inyectar.

Por defecto cURL no es persistente en tus requests, solo en los requests que hace bajo una misma instancia.

Saludos.
Era lo que me imaginaba ;), pero entonces como guardo esas cookies en otro archivo?

Te refieres utilizando otro método diferente al CURLOPT_COOKIEJAR y el CURLOPT_COOKIEFILE?

Muchas gracias de antemano
  #6 (permalink)  
Antiguo 29/07/2010, 11:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con CURL y mantener la sesion

No, vas a tener que manualmente leer las cookies de los headers en tu petición cURL y almacenarlas en otro lugar, luego al re-crear tu objeto cURL las vuelves a inyectar.

Saludos.
  #7 (permalink)  
Antiguo 29/07/2010, 16:32
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Duda con CURL y mantener la sesion

Cita:
Iniciado por GatorV Ver Mensaje
No, vas a tener que manualmente leer las cookies de los headers en tu petición cURL y almacenarlas en otro lugar, luego al re-crear tu objeto cURL las vuelves a inyectar.

Saludos.
Uhm... pero leer las cookies manualmente de los headers en mi petición CURL, te refieres al archivo que se crea con CURLOPT_COOKIEJAR?? leer ese archivo y almacenarlas en otro lugar?¿

No sé si te he entendido bien y cómo hacer lo que propones, puedes ponerme un ejemplo?

Por qué en el tema de aporte aparece lo que comentas?
http://www.forosdelweb.com/f18/aport...equest-724214/

Muchas gracias de antemano :)
  #8 (permalink)  
Antiguo 30/07/2010, 08:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con CURL y mantener la sesion

No, para establecer las cookies, estan se envían desde el servidor usando el comando SET-COOKIE (para el cliente) y viene en los haders, cURL lo que hace es leer esa cabecera y guardarlas en el Cookie Jar, tu tienes que también hacer lo mismo, solo que guardarlos en tu propio file para que en el siguiente requests las leas de ahí.

Saludos.
  #9 (permalink)  
Antiguo 30/07/2010, 12:46
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Duda con CURL y mantener la sesion

Cita:
Iniciado por GatorV Ver Mensaje
No, para establecer las cookies, estan se envían desde el servidor usando el comando SET-COOKIE (para el cliente) y viene en los haders, cURL lo que hace es leer esa cabecera y guardarlas en el Cookie Jar, tu tienes que también hacer lo mismo, solo que guardarlos en tu propio file para que en el siguiente requests las leas de ahí.

Saludos.
Perdona mi ignorancia GatorV, para hacer lo mismo yo, tendría que ser capaz de coger las cookies de la página mientras la estoy visitando, no?. Y eso con el navegador, por ejemplo Firefox, puedo ver las cookies de la página desde "Herramientas / Información de la página / Seguridad / Ver cookies"

¿Debo guardar esas cookies "junto a mi script"? desde el propio navegador no veo ninguna opción que diga guardar o exportar cookie.

Sin embargo, por suerte tengo instalada el complemento firebug y ahí si que me sale la opción "exportar cookies para este sitio". Esto me crea un fichero con todas las cookies de la web que estoy visitando.

Ese es el archivo que tengo que "endosarle" al script en la opción "CURLOPT_COOKIEFILE" ?

Gracias de antemano
  #10 (permalink)  
Antiguo 30/07/2010, 14:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con CURL y mantener la sesion

A que te refieres con lo mismo tu?, lo tienes que hacer vía codigo no vía tu explorador web.

La teoría es sencilla, es guardar las cookies generadas para poderlas volver a inyectar en un request diferente ya que cURL limpia sus variables al finalizar tu script.

Saludos.
  #11 (permalink)  
Antiguo 30/07/2010, 15:04
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Duda con CURL y mantener la sesion

Cita:
Iniciado por GatorV Ver Mensaje
A que te refieres con lo mismo tu?, lo tienes que hacer vía codigo no vía tu explorador web.

La teoría es sencilla, es guardar las cookies generadas para poderlas volver a inyectar en un request diferente ya que cURL limpia sus variables al finalizar tu script.

Saludos.
Arrrr!! vía código no encuentro la forma, todo lo que he encontrado ha sido como crear cookies, guardarlas, acceder a ellas vía codigo si estan creadas $_COOKIE['nombre de la cookie']

Pero no como guardar las cookies de una página sin utilizar CURL.

Cómo lo hago?
  #12 (permalink)  
Antiguo 30/07/2010, 15:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Duda con CURL y mantener la sesion

A ver si estas usando cURL, en el manual hay un ejemplo muy claro:
Código PHP:
Ver original
  1. <?php
  2. $url = "http://[host][uri]/file1.php"; /*insert desired host and
  3. uri*/
  4. $browser_id = "some crazy browser";
  5. $curl_handle = curl_init();
  6. $options = array
  7. (
  8.     CURLOPT_URL=>$url,
  9.     CURLOPT_HEADER=>true,
  10.     CURLOPT_RETURNTRANSFER=>true,
  11.     CURLOPT_FOLLOWLOCATION=>true,
  12.     CURLOPT_USERAGENT=>$browser_id
  13. );
  14. curl_setopt_array($curl_handle,$options);
  15. $server_output = curl_exec($curl_handle);
  16. curl_close($curl_handle);
  17.  
  18. /*construct the http search pattern for cookies*/
  19. $pattern  = "/Set-Cookie:";
  20. $pattern .= "(?P<name>.*?)=(?P<value>.*?); ";
  21. $pattern .= "expires=(?P<expiry_dayname>\w+), ";
  22. $pattern .= "(?P<expiry_day>\d+)-
  23. (?P<expiry_month>\w+)-(?P<expiry_year>\d+) ";
  24. $pattern .= "(?P<expiry_hour>\d+):
  25. (?P<expiry_minute>\d+):(?P<expiry_second>\d+) ";
  26. $pattern .= "(?P<expiry_zone>\w+)/";
  27. preg_match_all($pattern,$server_output,$matches);
  28.  
  29. $table_string = "
  30. <h1>cookie information table</h1>
  31. <table border='1'>
  32.    <tr>
  33.        <td>cookie name</td>
  34.        <td>value</td>
  35.        <td>expiry day</td>
  36.        <td>expiry date</td>
  37.        <td>expiry time</td>
  38.        <td>expiry timezone</td>
  39.    </tr>
  40. ";
  41. $i=0;
  42. foreach($matches[name] as $cookie_name)
  43. {
  44.     $table_string .= "
  45.    <tr>
  46.        <td>$cookie_name</td>
  47.  
  48.        <td>{$matches[value][$i]}</td>
  49.  
  50.        <td>{$matches[expiry_dayname][$i]}</td>
  51.  
  52.        <td>{$matches[expiry_day][$i]}-
  53.        {$matches[expiry_month][$i]}-
  54.        {$matches[expiry_year][$i]}</td>
  55.  
  56.        <td>{$matches[expiry_hour][$i]}:
  57.        {$matches[expiry_minute][$i]}:
  58.        {$matches[expiry_second][$i]}</td>
  59.  
  60.        <td>{$matches[expiry_zone][$i]}</td>
  61.    </tr>
  62.    ";
  63.     $i++;
  64. }
  65. $table_string .= "</table>";
  66. echo $table_string;
  67. ?>

Saludos.

Etiquetas: curl, mantener
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




La zona horaria es GMT -6. Ahora son las 01:16.