elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Hacer cURL en respuesta de cURL para posterior scraping.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Hacer cURL en respuesta de cURL para posterior scraping.  (Leído 4,502 veces)
goditozor

Desconectado Desconectado

Mensajes: 56


Aprendiz


Ver Perfil
Hacer cURL en respuesta de cURL para posterior scraping.
« en: 29 Agosto 2014, 00:57 am »

Hola amigos que tal?

Hace un par de meses que he estado aprendiendo scraping con diferentes clases como XPath.

Hace un par de semanas he estado intentando hacer algo que probablemente es sencillo pero no he podido encontrar la respuesta fácilmente así que me gustaría que me pudiesen ayudar.

Antes de mostrarle mi código, quiero que entiendan el problema.

Tengo una una pagina web que requiere un login y luego llenar otro formulario y enviarlo para que me muestre los datos que yo requiero.
Por lo tanto los pasos serian los siguientes.

1. Abrir la url y hacer login  (1er formulario)
2. En la nueva url despues de hacer login, debo llenar ciertos campos y enviar (2do formulario)
3. Hacer scraping.

Mi problema radica en el paso #2.  Despues de hacer el primer login no tengo idea de como usar el resultado del primer cURL (ver el codigo)

Este codigo toma una url que contiene el formulario y un Array que tiene los valores que pasare el formulario
Código:
function curlPost($postUrl, $postFields) {
     
        $cookie = 'cookie.txt'; // Setting a cookie file to store cookie
     
        $ch = curl_init();  // Initialising cURL session
     
        // Setting cURL options
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    // Prevent cURL from verifying SSL certificate
        curl_setopt($ch, CURLOPT_FAILONERROR, TRUE);    // Script should fail silently on error
        curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);  // Use cookies
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow Location: headers
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Returning transfer as a string
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);  // Setting cookiefile
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);   // Setting cookiejar
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1a2pre) Gecko/2008073000 Shredder/3.0a2pre ThunderBrowse/3.2.1.8");    // Setting useragent

        curl_setopt($ch, CURLOPT_URL, $postUrl);    // Setting URL to POST to       
        curl_setopt($ch, CURLOPT_POST, TRUE);   // Setting method as POST

        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postFields));    // Setting POST fields as array
                 
        $results = curl_exec($ch);  // Executing cURL session
       

        curl_close($ch);    // Closing cURL session
       
        return $results;
    }



Luego, este primer bloque, lo ejecuto de la siguiente manera:

Código:
$user ="userxxx";
        $pass = "passxxxxxxx";


        $login_url = "http://www.xxxxx.com/repositorio/consultas_web/";
        $post_array = array ('login' => $user,
                        'password' => $pass);   // Building post array.


        $results = curlPost($login_url, $post_array);


En este punto se que el primer paso cumple su función ya que si cambio la clave o user por uno invalido, me dara una advertencia de credenciales invalidos.

para verificar tengo que hacer un
Código:
echo $results;

Esto me lleva a la sub url que seria el "home" despues de hacer login

En mi caso, como estoy probando en localhost me da un error 404 cuando el login es correcto. La ruta es la siguiente:

Código:
[b]localhost/scraping/[/b]consultas_privadas.php
donde el texto en negritas es mi directorio local. y consultas_privadas.php es el subdirectorio que resulta despues de enviar el formulario.


El problema es que no se como continuar con la segunda etapa.


Pues, tengo que usar el resultado ( $results ) y hacer un cURL nuevamente  para repetir este método pero en un formulario diferente


intente utlizando el mismo metodo que en el paso 1 pero no se que estoy haciendo mal.
Código:
$results2 = curlPost($result, $post_array2);


y la verdad es que no se si esta mal o bien pues no se si tengo hacer un
Código:
echo $results;
para poder hacer el segundo $cURL.


 Alguien ha intentado hacer dos cURLs seguidos antes?


Estoy perdido :huh: cualquier ayuda es muy apreciada.
Gracias por tomar el tiempo para leer :)


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Hacer cURL en respuesta de cURL para posterior scraping.
« Respuesta #1 en: 29 Agosto 2014, 01:45 am »

Necesitas obtener el campo action del formulario que te lleva al segundo enlace del resultado del curl del primero. Estas intentando pasar la respuesta del curl como url para tu segundo curl por eso no funciona.


En línea

JorgeEMX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.615



Ver Perfil WWW
Re: Hacer cURL en respuesta de cURL para posterior scraping.
« Respuesta #2 en: 31 Agosto 2014, 15:29 pm »

En realidad no necesitas hacer nada más que llamar a tu segunda URL, no al resultado de la primera.

cURL lo único que hace es hacer peticiones HTTP y devolver el resultado, si iniciaste sesión correctamente en el primer request, deberías poder acceder a la segunda URL sin problema.
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Hacer cURL en respuesta de cURL para posterior scraping.
« Respuesta #3 en: 1 Septiembre 2014, 20:32 pm »

Porque la gente usa curl? no todos los servidores web lo tienen instalado, además no hace nada que no pueda hacer file_get_contents() el cual es nativo de php y está diseñado para este tipo de situaciones:

Código
  1. <?php
  2.  
  3. /* Primera petición */
  4. if(!$result = file_get_contents(
  5. 'http://www.xxxxx.com/repositorio/consultas_web/',
  6. false,
  7. array('http' =>
  8. 'method'  => 'POST',
  9. 'header'  => 'Content-type: application/x-www-form-urlencoded',
  10. 'content' => http_build_query(
  11. 'login' => 'userxxxxx',
  12. 'password' => 'passxxxxx'
  13. )
  14. )
  15. )
  16. )
  17. )
  18. ))
  19. die('Error en la primera consulta');
  20.  
  21. /* Obtiene las cookies de autentificación */
  22. $cookies = array();
  23. foreach($http_response_header as $cabecera)
  24. if(strtolower(substr($cabecera, 0, strlen('set-cookie: '))) == 'set-cookie: ')
  25. $cookies[] = substr($cabecera, strlen('set-cookie: '));
  26. $cookies = implode('; ', $cookies);
  27.  
  28. /* Segunda petición */
  29. if(!$result = file_get_contents(
  30. 'http://www.xxxxx.com/repositorio/privado/',
  31. false,
  32. array('http' =>
  33. 'method'  => 'POST',
  34. 'header'  => implode("\r\n", array(
  35. 'Content-type: application/x-www-form-urlencoded',
  36. 'Cookie: '.$cookies
  37. )),
  38. 'content' => http_build_query(
  39. 'data1' => 'val1',
  40. 'data2' => 'val2'
  41. )
  42. )
  43. )
  44. )
  45. )
  46. ))
  47. die('Error enl a segunda consulta');
  48.  
  49. /* Resultado */
  50. echo '<plaintext>';
  51. print_r($result);
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Scraping cn PHP cURL y Proxy
PHP
xalupeao 1 4,403 Último mensaje 23 Marzo 2010, 20:04 pm
por дٳŦ٭
CURL para actualizar Tuenti (PHP)
Scripting
pato3_3 0 2,039 Último mensaje 2 Febrero 2012, 13:30 pm
por pato3_3
cURL para HTTPS problemas con SSL
PHP
#Aitor 2 4,334 Último mensaje 9 Enero 2014, 21:16 pm
por #Aitor
Web proxy para usar curl con el
PHP
moikano→@ 0 1,542 Último mensaje 21 Abril 2014, 00:03 am
por moikano→@
Problema con curl en Kali Linux para saber mi IP
GNU/Linux
fumarmatamuchisimo 0 2,769 Último mensaje 3 Julio 2014, 23:33 pm
por fumarmatamuchisimo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines