Estou tentando conectar-me a um serviço oculto do Tor usando o seguinte código PHP:
$url = 'http://jhiwjjlqpyawmpjx.onion/'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:9050/");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$output = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);
print_r($output);
print_r($curl_error);
Quando o executo, recebo o seguinte erro:
Não foi possível resolver o nome do host
No entanto, quando executo o seguinte comando na minha linha de comando no Ubuntu:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
Eu recebo uma resposta como esperado
A documentação do PHP cURL diz o seguinte:
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
Eu acredito que o motivo pelo qual ele funciona na linha de comando é porque o Tor (o proxy) está resolvendo o nome de host .onion, que ele reconhece. Ao executar o código PHP acima, meu palpite é que cURL ou PHP está tentando resolver o nome de host .onion e não o reconhece. Procurei uma maneira de dizer ao cURL / PHP para permitir que o proxy resolvesse o nome do host, mas não consigo encontrar uma maneira.
Há uma pergunta muito semelhante ao Stack Overflow, a solicitação cURL usando o proxy socks5 falha ao usar o PHP, mas funciona através da linha de comando .
forward-socks5 / localhost:9150 .