Estoy tratando de conectarme a un servicio oculto de Tor usando el siguiente 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);
Cuando lo ejecuto, aparece el siguiente error:
No se pudo resolver el nombre de host
Sin embargo, cuando ejecuto el siguiente comando desde mi línea de comandos en Ubuntu:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
Recibo una respuesta como se esperaba
La documentación de PHP cURL dice esto:
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
Creo que la razón por la que funciona desde la línea de comandos es porque Tor (el proxy) está resolviendo el nombre de host .onion, que reconoce. Cuando ejecuto el código PHP anterior, supongo que cURL o PHP está tratando de resolver el nombre de host .onion y no lo reconoce. He buscado una manera de decirle a cURL / PHP que permita que el proxy resuelva el nombre de host, pero no puedo encontrar una manera.
Hay una pregunta de desbordamiento de pila muy similar, la solicitud cURL que usa el proxy socks5 falla cuando se usa PHP, pero funciona a través de la línea de comando .
forward-socks5 / localhost:9150 .