php - ¿Cómo usar CURL a través de un proxy?
curl php proxy authentication (3)
Estoy buscando establecer Curl para usar un servidor proxy. La URL es proporcionada por un formulario html, que no ha sido un problema. Sin el proxy, funciona bien. He encontrado código en este y otros sitios, pero no funcionan. Cualquier ayuda para encontrar la solución correcta sería muy apreciada. Siento que el bramido está cerca, pero que me falta algo. Gracias.
El código de abajo que he adaptado aquí http://www.webmasterworld.com/forum88/10572.htm pero devuelve un mensaje de error acerca de una T_VARIABLE que falta 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 siguiente es de curl a través de proxy no devuelve 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;
?>
está actualmente en vivo en pelican-cement.com pero tampoco funciona.
ACTUALIZACIÓN: Gracias por toda su ayuda, hice los cambios anteriores. Ahora solo 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;
?>
Aquí hay una función bien probada que utilicé para mis proyectos con comentarios explicativos detallados
Hay muchas ocasiones en que los puertos que no sean 80 están bloqueados por el servidor de seguridad, por lo que el código parece funcionar bien en el servidor local 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;
}
Aquí hay una versión de trabajo con sus errores 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 agregado CURLOPT_PROXYUSERPWD
en caso de que alguno de tus proxies requiera un nombre de usuario y contraseña. Establecí CURLOPT_RETURNTRANSFER
en 1, de modo que los datos se devolverán a la variable $curl_scraped_page
.
curl_exec($ch);
un segundo extra curl_exec($ch);
lo que detendría la devolución de la variable. Consolidé tu proxy IP y puerto en una configuración.
También CURLOPT_HTTPPROXYTUNNEL
y CURLOPT_CUSTOMREQUEST
ya que era el predeterminado.
Si no desea que se devuelvan los encabezados, comente CURLOPT_HEADER
.
Para deshabilitar el proxy, simplemente configúrelo como nulo.
curl_setopt($ch, CURLOPT_PROXY, null);
Cualquier pregunta no dude en preguntar, yo trabajo con cURL
todos los días.
He explicado el uso de varias opciones de CURL requeridas para CURL PROXY.
$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); // URL for CURL call
curl_setopt($ch, CURLOPT_PROXY, $proxy); // PROXY details with port
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth); // Use if proxy have username and password
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // If expected to call with specific PROXY type
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // If url has redirects then go to the final redirected URL.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); // Do not outputting it out directly on screen.
curl_setopt($ch, CURLOPT_HEADER, 1); // If you want Header information of response else make 0
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
echo $curl_scraped_page;