Eu estou olhando para definir curl para usar um servidor proxy. O URL é fornecido por um formulário html, o que não foi um problema. Sem o proxy, ele funciona bem. Encontrei código neste e em outros sites, mas eles não funcionam. Qualquer ajuda para encontrar a solução correta seria muito apreciada. Sinto que o fole está próximo, mas estou perdendo alguma coisa. Obrigado.
O código abaixo que eu adaptei daqui http://www.webmasterworld.com/forum88/10572.htm, mas ele retorna uma mensagem de erro sobre um T_VARIABLE ausente na linha 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);
?>
O fole é de curl através de proxy não retorna conteúdo
<?
$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á atualmente no site pelican-cement.com, mas também não funciona.
ATUALIZAÇÃO: Obrigado por toda a sua ajuda, fiz as alterações acima. Agora, ele retorna apenas uma tela em branco.
<?
$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']
Respostas:
Aqui está uma versão funcional com os erros removidos.
Eu adicionei
CURLOPT_PROXYUSERPWD
caso algum dos seus proxies exija um nome de usuário e senha. DefinoCURLOPT_RETURNTRANSFER
como 1, para que os dados retornem à$curl_scraped_page
variável.Eu removi um segundo extra
curl_exec($ch);
que interromperia o retorno da variável. Consolidei o IP e a porta do proxy em uma configuração.Eu também removi
CURLOPT_HTTPPROXYTUNNEL
e,CURLOPT_CUSTOMREQUEST
como era o padrão.Se você não quiser que os cabeçalhos retornem, comente
CURLOPT_HEADER
.Para desativar o proxy, basta configurá-lo como nulo.
Qualquer dúvida não hesite em perguntar, eu trabalho
cURL
todos os dias.fonte
Expliquei o uso de várias opções de CURL necessárias para o CURL PROXY.
fonte
Aqui está uma função bem testada que eu usei para meus projetos com comentários auto-explicativos detalhados
Muitas vezes, quando portas diferentes de 80 são bloqueadas pelo firewall do servidor, o código parece estar funcionando bem no host local, mas não no servidor
fonte
/etc/ssl/certs
em Debian / Ubuntu, por exemplo)