Próbuję połączyć się z usługą ukrytą Tora za pomocą następującego kodu 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);
Po uruchomieniu pojawia się następujący błąd:
Nie można rozpoznać nazwy hosta
Jednak po uruchomieniu następującego polecenia z wiersza polecenia w systemie Ubuntu:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
Otrzymuję odpowiedź zgodnie z oczekiwaniami
Dokumentacja PHP cURL mówi:
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
Uważam, że powodem, dla którego działa z wiersza poleceń, jest to, że Tor (proxy) rozwiązuje nazwę hosta .onion, którą rozpoznaje. Kiedy uruchamiam powyższy kod PHP, domyślam się, że cURL lub PHP próbuje rozwiązać nazwę hosta .onion i nie rozpoznaje go. Szukałem sposobu, aby cURL / PHP pozwolił proxy rozpoznać nazwę hosta, ale nie mogę znaleźć sposobu.
Istnieje bardzo podobne pytanie o przepełnienie stosu, żądanie cURL przy użyciu proxy socks5 kończy się niepowodzeniem podczas korzystania z PHP, ale działa przez wiersz poleceń .
forward-socks5 / localhost:9150 .