Foro Black Hat SEO

Versión completa: Como utilizar Proxy en PHP usando la librería Curl
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Si quieres saber como scrapear utilizando PHP te recomiendo este hilo:
http://foroblackhat.com/hilo-scrapear-ut...3%ADa-curl

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

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 "[username]:[password]" 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
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
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:
Código:
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:
Código:
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
@Sauron controlas de Python y Proxies?
(06-04-2014, 03:29 AM)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.