Примечание для персонала: Этот вопрос и связанные с ним ответы были заблокированы, чтобы предотвратить обсуждение не по теме события, связанного с рассматриваемым вопросом. С вопросами об этом событии можно ознакомиться на нашем мета-сайте. Спасибо!
Я пытаюсь подключиться к скрытому сервису Tor, используя следующий код 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);
Когда я его запускаю, я получаю следующую ошибку:
Не удалось разрешить имя хоста
Однако, когда я запускаю следующую команду из моей командной строки в Ubuntu:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
Я получаю ответ, как и ожидалось
Документация PHP cURL гласит:
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
Я полагаю, что причина, по которой он работает из командной строки, заключается в том, что Tor (прокси) разрешает имя хоста .onion, которое он распознает. Когда я запускаю код PHP выше, я предполагаю, что cURL или PHP пытаются определить имя хоста .onion и не распознают его. Я искал способ сказать cURL/PHP, чтобы прокси разрешал имя хоста, но я не могу найти способ.
Существует очень похожий вопрос Qaru: cURL-запрос с использованием прокси socks5 не выполняется при использовании PHP, но он работает через командную строку.