Estoy buscando configurar 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 los bramidos están cerca, pero que me falta algo. Gracias.
El siguiente código que adapté desde aquí http://www.webmasterworld.com/forum88/10572.htm pero devuelve un mensaje de error acerca de una T_VARIABLE faltante 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;
?>
actualmente está 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;
?>
$_POST['1']
Respuestas:
Aquí hay una versión que funciona con sus errores eliminados.
He agregado
CURLOPT_PROXYUSERPWD
en caso de que cualquiera de sus servidores proxy requiera un nombre de usuario y contraseña. Lo configuréCURLOPT_RETURNTRANSFER
en 1, para que los datos vuelvan a la$curl_scraped_page
variable.Eliminé un segundo extra
curl_exec($ch);
que detendría la devolución de la variable. Consolidé su proxy IP y puerto en una configuración.También eliminé
CURLOPT_HTTPPROXYTUNNEL
yCURLOPT_CUSTOMREQUEST
como era el predeterminado.Si no desea que se devuelvan los encabezados, comente
CURLOPT_HEADER
.Para deshabilitar el proxy, simplemente configúrelo como nulo.
Cualquier pregunta no dude en preguntar, trabajo con
cURL
todos los días.fuente
He explicado el uso de varias opciones de CURL requeridas para CURL PROXY.
fuente
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 firewall del servidor, por lo que el código parece funcionar bien en localhost pero no en el servidor
fuente
/etc/ssl/certs
en Debian / Ubuntu, por ejemplo)