60 votos

Cómo utilizar CURL través de un proxy?

Yo estoy mirando para establecer curl para utilizar un servidor proxy. La url proporcionada por un formulario html, que no ha sido un problema. Sin el proxy funciona bien. He encontrado el código en este y otros sitios, pero no funcionan. Cualquier ayuda en la búsqueda de la solución correcta sería muy apreciada. Creo que los de abajo están cerca, pero que me falta algo. Gracias.

El bramido código que he adaptado de aquí http://www.webmasterworld.com/forum88/10572.htm pero devuelve un mensaje de error acerca de una falta T_VARIABLE en la línea 12.

<?

$url = '$_POST[1]';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '66.96.200.39:80');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1)
curl_exec ($ch); 
$curl_info = curl_getinfo($ch);
curl_close($ch);
echo '<br />';
print_r($curl_info);
?>

El fuelle es de rizo a través de proxy devuelve ningún contenido

<?

$proxy = "66.96.200.39:80";
$proxy = explode(':', $proxy);
$url = "$_POST[1]";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]);
curl_setopt($ch, CURLOPT_HEADER, 1);

$exec = curl_exec($ch);

echo curl_error($ch);
print_r(curl_getinfo($ch));
echo $exec;
?>

actualmente vivo en pelican-cement.com pero también no funciona.

ACTUALIZACIÓN: Gracias por toda tu ayuda, he hecho los cambios antes mencionados. Ahora sólo devuelve una pantalla en blanco.

<?

$url = $_POST['1'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXY, '66.96.200.39:80');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_exec ($ch); 
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;
?> 

@Pekka @yoavmatchulsky @MT

133voto

GravyCode Puntos 761

Aquí es una versión de trabajo con sus bugs eliminados.

$url = 'http://dynupdate.no-ip.com/ip.php';
$proxy = '127.0.0.1:8888';
//$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

echo $curl_scraped_page;

He añadido "CURLOPT_PROXYUSERPWD" en caso que cualquiera de sus servidores proxy requiere un nombre de usuario y contraseña. Me puse "CURLOPT_RETURNTRANSFER" a 1, de modo que los datos serán devueltos a $curl_scraped_page. He quitado un segundo extra "curl_exec($ch);" que dejaría la variable que está siendo devuelto. Yo consolidado su IP del proxy y el puerto en 1 ajuste. He quitado CURLOPT_HTTPPROXYTUNNEL He quitado CURLOPT_CUSTOMREQUEST, como es el predeterminado. Si no desea que los encabezados devuelto, comentario CURLOPT_HEADER.

Para deshabilitar el proxy simplemente establece a null.

curl_setopt($ch, CURLOPT_PROXY, null);

Cualquier duda no dude en preguntar, yo trabajo con cURL cada día.

-2voto

hammad1238 Puntos 1

Aquí está una función bien probada que usé para mis proyectos con detallados explicativas del uno mismo


Hay muchas veces cuando están bloqueados los puertos que no sean 80 por firewall servidor así el código parece estar funcionando bien en localhost pero no en el servidor

function get_page($url){

global $proxy;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_HEADER, 0); // return headers 0 no 1 yes
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // return page 1:yes
curl_setopt($ch, CURLOPT_TIMEOUT, 200); // http request timeout 20 seconds
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Follow redirects, need this if the url changes
curl_setopt($ch, CURLOPT_MAXREDIRS, 2); //if http server gives redirection responce
curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); // cookies storage / here the changes have been made
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // false for https
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // the page encoding

$data = curl_exec($ch); // execute the http request
curl_close($ch); // close the connection
return $data;
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X