php curl proxy tor

¿Cómo puedo conectarme a un servicio oculto de Tor usando cURL en PHP?



proxy (3)

Intenta añadir esto:

curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);

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, me sale el siguiente error:

No se pudo resolver el nombre de host

Sin embargo, cuando ejecuto el siguiente comando desde mi línea de comando 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 intentan resolver el nombre de host .onion y no lo reconocen. He buscado una forma 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 de cURL que usa el proxy socks5 falla cuando se usa PHP, pero funciona a través de la línea de comandos .


Parece que CURLPROXY_SOCKS5_HOSTNAME no está definido en PHP, pero puedes usar explícitamente su valor, que es igual a 7:

curl_setopt($ch, CURLOPT_PROXYTYPE, 7);


Uso Privoxy y CURL para raspar las páginas de Tor:

<?php $ch = curl_init(''http://jhiwjjlqpyawmpjx.onion''); // Tormail URL curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); curl_setopt($ch, CURLOPT_PROXY, "localhost:8118"); // Default privoxy port curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); curl_exec($ch); curl_close($ch); ?>

Después de instalar Privoxy, debe agregar esta línea al archivo de configuración ( /etc/privoxy/config ). Tenga en cuenta el espacio y ''.'' Un final de línea.

forward-socks4a / localhost:9050 .

Luego reinicie Privoxy.

/etc/init.d/privoxy restart