Foro Black Hat SEOArchivo · solo lectura
RankHispano

¿Quieres que se conozca tu proyecto?

Da de alta gratis tu proyecto en menos
de un minuto gracias a la IA
en RankHispano.com

Como utilizar Proxy en PHP usando la librería Curl

Iniciado por Sauron · 19 mar 2014 · 4 respuestas · 10.491 visitas

  1. Sauron
    Si quieres saber como scrapear utilizando PHP te recomiendo este hilo:
    http://foroblackhat.com/hilo-scrapear-utilizando-php-nativo-y-la-librer%C3%ADa-curl

    Ahora vamos a tratar como Scrapear empleando Proxy, que es dar un pasito más en el scripting del Blackhatero :)

    Vamos a trabajar con nuevas opciones de Curl que son:
    CURLOPT_PROXY El proxy HTTP para enviar peticiones a través de tunel.
    CURLOPT_PROXYTYPE: Puede ser CURLPROXY_HTTP (por defecto) o bien CURLPROXY_SOCKS5.
    CURLOPT_HTTPPROXYTUNNEL: TRUE para usar un tunel a través de un proxy HTTP.
    y en el caso de necesitar autentificación en el proxy serían:
    CURLOPT_PROXYAUTH: Método de autenticación HTTP para usar conexiones vía proxy. Usa el mismo tipo de máscaras descritas en CURLOPT_HTTPAUTH. Para autenticación proxy, solamente CURLAUTH_BASIC y CURLAUTH_NTLM están actualmente soportadas.
    CURLOPT_PROXYUSERPWD: Usuario y contraseña con el siguiente formato ":" para usarse en la conexión al proxy.

    <?PHP
    function get_content_url_with_proxy($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    curl_setopt($ch, CURLOPT_PROXY, 'ip:port');
    curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'username:password');
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8');

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
    }

    Está en negrita lo que tienes que cambiar para que trabaje el Curl a través de un proxy. Si no hay autentificación en el proxy, quita o comenta las líneas con las opciones URLOPT_PROXYAUTH y CURLOPT_PROXYUSERPWD.


    Cualquier duda para implementar esto en PHP, coméntala en este hilo.

    Aquí puedes ver todas las opciones y sus posibles parámetros que puedes utilizar en Curl:
    http://www.php.net/manual/es/function.curl-setopt.php
  2. emiceru
    Buenas, he probado este codigo y no se por que no me funcionó.

    He conseguido que me funcione cambiando estas 4 lineas:
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    curl_setopt($ch, CURLOPT_PROXY, 'ip:port');
    curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'username:password');

    Por esta:
    curl_setopt($ch, CURLOPT_PROXY, 'ip:port:username:password');

    Lo dejo aquí por si a alguien le viene bien
  3. Sauron
    Muchas gracias @emiceru

    La verdad es que estas dos líneas nunca la había usado, las saqué de la documentación que hay en PHP.net:
    curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'username:password');	


    Posiblemente el problema es que el tipo de autenticación sea otro al CURLAUTH_NTLM, podrías probar la autenticación básica CURLAUTH_BASIC, por lo que quedarían las cuatro líneas:
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); //sino lo especificas usa CURLPROXY_HTTP por defecto
    curl_setopt($ch, CURLOPT_PROXY, 'ip:port');
    curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'username:password');	


    Recordar que si el proxy es un socks5 en CURLOPT_PROXYTYPE deberéis poner: CURLPROXY_SOCKS5
  4. Right Now
    @Sauron controlas de Python y Proxies?
  5. Sauron
    powerseo escribió:@Sauron controlas de Python y Proxies?


    Con Python hice unas prácticas de la Universidad con la librería OpenCV de reconomiento de imágenes, que es muy potente, pero después de esto, no he vuelto a tocar ese lenguaje, por lo que todo lo que hago como lenguaje de servidor utilizo PHP, que me resulta muy cómodo.

Este hilo pertenece al archivo del foro y ya no admite respuestas.

Otros hilos de esta sección