Как я могу подключиться к скрытому сервису Tor, используя cURL в PHP?

267

Я пытаюсь подключиться к скрытой службе 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 hostname, которое он распознает. При запуске PHP-кода выше, я предполагаю, что cURL или PHP пытается разрешить имя .onion hostname и не распознает его. Я искал способ сообщить cURL/PHP, чтобы прокси-сервер разрешил имя хоста, но я не могу найти способ.

Существует очень похожий вопрос, запрос cURL с использованием прокси-сервера socks5 сбой при использовании PHP, но он работает через командную строку.

Теги:
curl
proxy
tor

3 ответа

85

Похоже, что CURLPROXY_SOCKS5_HOSTNAME не определен в PHP, но вы можете явно использовать его значение, равное 7:

curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
17

Я использую Privoxy и cURL для очистки страниц 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);
?>

После установки Privoxy вам нужно добавить эту строку в файл конфигурации (/etc/privoxy/config). Обратите внимание на пробел и '.' a конец строки.

forward-socks4a / localhost:9050 .

Затем перезапустите Privoxy.

/etc/init.d/privoxy restart
  • 0
    Это работает! Протестировано на Windows 10 и CentOS 6, также если Tor использует Socks 5 вместо Socks 4, используйте это: forward-socks5 / localhost:9150 .
  • 0
    мне нужно TOR и Privoxy, чтобы это работало? Спасибо
5

Попробуйте добавить это:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню