Sto cercando di connettermi a un servizio nascosto Tor utilizzando il seguente codice 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 lo eseguo, viene visualizzato il seguente errore:
Impossibile risolvere il nome host
Tuttavia, quando eseguo il seguente comando dalla mia riga di comando in Ubuntu:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
Ricevo una risposta come previsto
La documentazione PHP cURL dice questo:
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
Credo che il motivo per cui funziona dalla riga di comando sia perché Tor (il proxy) sta risolvendo il nome host .onion, che riconosce. Quando eseguo il codice PHP sopra, suppongo che cURL o PHP stiano cercando di risolvere il nome host .onion e non lo riconoscono. Ho cercato un modo per dire a cURL / PHP di consentire al proxy di risolvere il nome host, ma non riesco a trovare un modo.
C'è una domanda Stack Overflow molto simile, la richiesta cURL che usa il proxy socks5 fallisce quando si usa PHP, ma funziona attraverso la riga di comando .
forward-socks5 / localhost:9150 .