Ich versuche, eine Verbindung zu einem Tor Hidden Service mit folgendem PHP-Code herzustellen:
$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);
Wenn ich es ausführe, erhalte ich den folgenden Fehler:
Konnte den Hostnamen nicht auflösen
Wenn ich jedoch folgenden Befehl in meinem Ubuntu-Terminal ausführe:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
erhalte ich eine erwartete Antwort.
Die PHP cURL Dokumentation sagt dies:
--socks5-hostname
Verwenden Sie den angegebenen SOCKS5 Proxy (und lassen Sie den Proxy den Hostnamen auflösen).
Ich glaube, dass es vom Befehlszeilen-Terminal funktioniert, weil Tor (der Proxy) den .onion Hostnamen auflöst, den es erkennt. Beim Ausführen des obigen PHP-Codes ist meine Vermutung, dass cURL oder PHP versucht, den .onion Hostnamen aufzulösen und ihn nicht erkennt. Ich habe nach einer Möglichkeit gesucht, cURL/PHP mitzuteilen, dass der Proxy den Hostnamen auflösen soll, aber ich kann keinen Weg finden.
Es gibt eine sehr ähnliche Stack Overflow Frage, cURL-Anfrage mit Socks5-Proxy schlägt in PHP fehl, funktioniert aber über die Befehlszeile.