Foros del Web » Programando para Internet » PHP »

Acceso a http con Curl

Estas en el tema de Acceso a http con Curl en el foro de PHP en Foros del Web. Hola, me interesa aprender curl como sea ya que veo que una herramienta que para mi trabajo me puede ir de lujo. Ya hice un ...
  #1 (permalink)  
Antiguo 12/08/2009, 12:28
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 10 meses
Puntos: 32
Acceso a http con Curl

Hola, me interesa aprender curl como sea ya que veo que una herramienta que para mi trabajo me puede ir de lujo. Ya hice un tema para ver si alguién tenía información acerca de curl pero nadie ha contestado (http://www.forosdelweb.com/f18/curl-715721/), entonces no me queda otra que la de experimentar. Lo primero que quiero hacer es loguearme en una aplicación interna HTTP. Las cabeceras del navegador cuando loguea una vez introducidos user y pass son:

http://sitio.lan/OUT/out_index.php

POST /OUT/out_index.php HTTP/1.1
Host: sitio.lan
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://sitio.lan/OUT/out_index.php
Cookie: PHPSESSID=d7416tdp9jp6vf37msiuf4cr60
Content-Type: application/x-www-form-urlencoded
Content-Length: 44
txtLOGIN=usuario&txtCLAVE=password&sub=Entrar
HTTP/1.x 302 Found
Date: Wed, 12 Aug 2009 18:06:59 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: out_index.php
Content-Length: 0
Connection: close
Content-Type: text/html; charset=iso-8859-1

Pues teniendo esto he hecho dos pruebas con distinto código:

1ª:

Código PHP:
$ch curl_init();
curl_setopt($chCURLOPT_URL"http://sitio.lan/OUT/out_index.php");
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
curl_setopt($chCURLOPT_USERPWD"usuario:password");
curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_BASIC);
$output curl_exec($ch);
curl_close($ch);
echo 
$output
y



Código PHP:
 $ch curl_init();
curl_setopt($chCURLOPT_URL"http://sitio.lan/OUT/out_index.php");
curl_setopt ($chCURLOPT_POST1); 
curl_setopt ($chCURLOPT_POSTFIELDS"txtLOGIN=usuario&txtCLAVE=password&sub=Entrar"); 
curl_setopt($ch,CURLOPT_REFERER'http://sitio.lan/OUT/out_index.php');
curl_setopt($chCURLOPT_RETURNTRANSFER1);
$output curl_exec($ch);
curl_close($ch);
echo 
$output
Lógicamente no loguea ninguna de las dos. Pongo que muestre la variable $output para comprobarlo pero sale la pantalla en blanco.

- Alguién sabe qué me falta o me sobra?
- La cookie para hacer el logueo no es necesaria verdad? Sólo para solicitar datos nuevos, no? Lo que no se es por qué sale en la cabecera de logueo ¿?

El funcionamiento lo entiendo pero no se aplicarlo.

Gracias.
  #2 (permalink)  
Antiguo 12/08/2009, 13:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Acceso a http con Curl

Depuracion basica: Verifica si $ch fue creado correctamente:

Código php:
Ver original
  1. $ch = curl_init();
  2. if($ch === false)
  3.     die('No se puede inicializar la conexion.');
  4.  
  5. // Aqui continuas el proceso normal
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 12/08/2009, 13:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Acceso a http con Curl

Mira este post http://www.forosdelweb.com/f18/aport...equest-724214/

@Triby Yo no sé como tu lo sabes pero ¿John Lennon va a morir en el 4980?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 12/08/2009 a las 13:33
  #4 (permalink)  
Antiguo 12/08/2009, 14:04
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 10 meses
Puntos: 32
Respuesta: Acceso a http con Curl

Bueno os cuento.....

Triby, al probar lo que comentas no me sale el mensaje, por lo que $ch se crea bien.

abimaelrc, muy bueno tu post. He probado este y si ponemos bien el login no muestra nada, en cambio si ponemos el login mal sale el mensaje de datos incorrectos.

Código PHP:
$url 'http://sitio.lan/OUT/out_index.php';
$body 'txtLOGIN=usuario&txtCLAVE=password&sub=Entrar';
$c curl_init($url);
curl_setopt($cCURLOPT_POSTtrue);
curl_setopt($cCURLOPT_POSTFIELDS$body);
curl_setopt($cCURLOPT_RETURNTRANSFERtrue);
$page curl_exec($c);
curl_close($c);
echo 
$page
Y este sólo me muestra la página principal ya tenga los datos correctos o no.

Código PHP:
$c curl_init('http://sitio.lan/OUT/out_index.php');
curl_setopt($cCURLOPT_RETURNTRANSFERtrue);
curl_setopt($cCURLOPT_USERPWD'usuario:password');
$page curl_exec($c);
curl_close($c);
echo 
$page
  #5 (permalink)  
Antiguo 12/08/2009, 14:48
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Acceso a http con Curl

Tienes que asegurarte que la pagina no te este redireccionando, si es así que te esta redireccionando necesitas usar
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
. Te sugiero que te leas todo el material que esta posteado y luego vayas a http://www.php.net/manual/en/function.curl-setopt.php Tambien te sugiero que verifiques sobre los cookies.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 12/08/2009, 14:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Acceso a http con Curl

Si la otra pagina hace un redirect, tienes que activar la opción de CURLOPT_FOLLOWLOCATION para que cURL lea el header de Redirect, ya que por defecto no lo hace.

Saludos.
  #7 (permalink)  
Antiguo 12/08/2009, 15:00
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Acceso a http con Curl

Cita:
Iniciado por abimaelrc
@Triby Yo no sé como tu lo sabes pero ¿John Lennon va a morir en el 4980?
Ah bueno, es que el tipo y su musica son eternos.

Gracias por el aviso, ya lo corregi.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 13/08/2009, 09:10
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 10 meses
Puntos: 32
Respuesta: Acceso a http con Curl

Vale chicos, ya lo he conseguido, muchas gracias (me queda mucho por aprender). Pongo el código que he usado. Lo he encontrado en una web.

Código PHP:
$ch curl_init();
curl_setopt($chCURLOPT_COOKIEJAR"C:\cookieFileName");
curl_setopt($chCURLOPT_URL,"http://sitio.lan/OUT/out_index.php");
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS"txtLOGIN=usuario&txtCLAVE=password&sub=Entrar");

ob_start();      // prevent any output
curl_exec ($ch); // execute the curl command
ob_end_clean();  // stop preventing output

curl_close ($ch);
unset(
$ch);

$ch curl_init();
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_COOKIEFILE"C:\cookieFileName");
curl_setopt($chCURLOPT_URL,"http://sitio.lan/GST/gst_index.php");

$buf2 curl_exec ($ch);

curl_close ($ch);

echo 
"<PRE>".htmlentities($buf2); 
Teniendo esto yo creo que con lo siguiente ya me apañaré.
  #9 (permalink)  
Antiguo 21/08/2009, 11:34
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 10 meses
Puntos: 32
Respuesta: Acceso a http con Curl

Lo de cargar el código en una variable y manejarlo no hay problema. Lo que quería hacer ahora es que picando en cualquier link de la web descarga con curl, mandara la cookie en las cabeceras del navegador. Yo he probado con Firefox y le he dicho dónde debe guardar la cookie (en el fichero de firefox lógicamente C:\Users\usuario\AppData\Roaming\Mozilla\Firefox\P rofiles\z1bz05tx.default\cookies.txt) pero al picar en cualquier link me pide de nuevo user y pass.

Cómo puedo vincular la cookie creada con curl al navegador?
  #10 (permalink)  
Antiguo 22/08/2009, 12:37
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Acceso a http con Curl

Primero te sugiero que te conectes a esa pagina sin usar curl y mires como guarda el user y el pass. Luego trata de ver como lo hace curl. Mientras tanto, te sugiero que busques este proxy para que aprendas como ellos hacen las conexiones con los links, se llama PHProxy.

Me dejas saber
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 23/08/2009, 10:21
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 10 meses
Puntos: 32
Respuesta: Acceso a http con Curl

Cita:
Cita:
Iniciado por GatorV Ver Mensaje
Si la otra pagina hace un redirect, tienes que activar la opción de CURLOPT_FOLLOWLOCATION para que cURL lea el header de Redirect, ya que por defecto no lo hace.

Saludos.
El login lo hace bien pero me da que lo del redirect no. Si después de loguear solicito otra url, la cebecera me devuelve HTTP/1.1 302 Found. Entonces lo pongo:
Código PHP:
curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue); 
y sale lo mismo. A lo mejor hay varias redirecciones, por lo que le pongo también:
Código PHP:
curl_setopt($chCURLOPT_MAXREDIRS10); 
pero sigue saliendo lo mismo. Si ponemos "0" a
Código PHP:
curl_setopt($chCURLOPT_MAXREDIRS10); 
significa ninguna o infinitas?
Cita:
Iniciado por cluster28
Lo de cargar el código en una variable y manejarlo no hay problema. Lo que quería hacer ahora es que picando en cualquier link de la web descarga con curl, mandara la cookie en las cabeceras del navegador. Yo he probado con Firefox y le he dicho dónde debe guardar la cookie (en el fichero de firefox lógicamente C:\Users\usuario\AppData\Roaming\Mozilla\Firefox\P rofiles\z1bz05tx.default\cookies.txt) pero al picar en cualquier link me pide de nuevo user y pass.

Cómo puedo vincular la cookie creada con curl al navegador?
Cita:
Iniciado por abimaelrc
Primero te sugiero que te conectes a esa pagina sin usar curl y mires como guarda el user y el pass. Luego trata de ver como lo hace curl. Mientras tanto, te sugiero que busques este proxy para que aprendas como ellos hacen las conexiones con los links, se llama PHProxy.

Me dejas saber
Efectivamente curl guarda la cookie de sesión de forma distinta a Firefox.
  #12 (permalink)  
Antiguo 23/08/2009, 10:44
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Acceso a http con Curl

Pues ahi tienes, por eso no puedes continuar sin usar curl. Vas a tener que aprender como hacer que cuando cURL descargue la pagina manejar los links de tal forma que cuando le des click uses el mismo curl para que vaya a esa pagina. Mira PHProxy para que veas lo que te digo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 23/08/2009, 10:47
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 10 meses
Puntos: 32
Respuesta: Acceso a http con Curl

Cita:
Iniciado por abimaelrc Ver Mensaje
Pues ahi tienes, por eso no puedes continuar sin usar curl. Vas a tener que aprender como hacer que cuando cURL descargue la pagina manejar los links de tal forma que cuando le des click uses el mismo curl para que vaya a esa pagina. Mira PHProxy para que veas lo que te digo.
Usar CURL para cargar cada página? Para eso uso la web normalmente y listo. Lo de PHPproxy no se que es. En Google he visto que hay una web llamada así y un programa. No se a qué te refieres.
  #14 (permalink)  
Antiguo 23/08/2009, 11:04
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Acceso a http con Curl

Bueno la ventaja que tienes al usar cURL es que no tienes que usar el sistema de logueo ya que se lo puedes declarar con cURL.

PHProxy lo que hace es bastante similar a lo que tu quieres hacer, solo te estoy indicando ese programa para que veas como los creadores hicieron para guardar las cookies y como yo puedo continuar navegando y no me redirecciona directamente al sitio sino que sigo usando el phproxy. Tu debes haberte dado cuenta de que cuando cargas la pagina si le das un click a algun link te lleva directamente al sitio y se sale de lo que ha cargado en el servidor tuyo. Pues si vez como lo hacen con este programa vas a darte cuenta que los links esta codificados y que te vuelve a enviar al programa para que este se encargue de continuar navegando.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 23/08/2009, 11:56
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 10 meses
Puntos: 32
Respuesta: Acceso a http con Curl

Cita:
Iniciado por abimaelrc Ver Mensaje
Bueno la ventaja que tienes al usar cURL es que no tienes que usar el sistema de logueo ya que se lo puedes declarar con cURL.

PHProxy lo que hace es bastante similar a lo que tu quieres hacer, solo te estoy indicando ese programa para que veas como los creadores hicieron para guardar las cookies y como yo puedo continuar navegando y no me redirecciona directamente al sitio sino que sigo usando el phproxy. Tu debes haberte dado cuenta de que cuando cargas la pagina si le das un click a algun link te lleva directamente al sitio y se sale de lo que ha cargado en el servidor tuyo. Pues si vez como lo hacen con este programa vas a darte cuenta que los links esta codificados y que te vuelve a enviar al programa para que este se encargue de continuar navegando.
Sí puede ser que PHProxy haga lo que busco, aunque con la aplicación que quiero no funciona .

Lo de los links relativos que al cargar se quedan como http://localhost/..... ya los he modificado para que carguen con la URL correcta, de ahí que solicitara la ayuda para usar la cookie de curl con Firefox.
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 13:00.