php curl proxy php-curl

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;