Возникла проблема при использовании Tor с Curl:
У меня есть этот скрипт:
$ch = curl_init();<br>
curl_setopt($ch, CURLOPT_URL, "http://whatismyip.org");<br>
curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:9050");<br>
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);<br>
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br>
curl_setopt($ch, CURLOPT_VERBOSE, 0);<br>
$response = curl_exec($ch);<br>
$errno = curl_error($ch);<br>
print_r($errno);<br>
Когда я использую это, то сталкиваюсь с этой ошибкой:
Не удается завершить соединение SOCKS5 с 0.0.0.0:0. (6)
И когда я использую этот скрипт:
$proxy = "127.0.0.1";<br>
$port = "9050";<br>
$url = "http://whatismyip.org";<br>
$ch = curl_init();<br>
curl_setopt ($ch, CURLOPT_URL, $url);<br>
curl_setopt ($ch, CURLOPT_HEADER, 0);<br>
curl_setopt ($ch, CURLOPT_PROXYTYPE, 7 );<br>
curl_setopt ($ch, CURLOPT_PROXY, $proxy.':'.$port );<br>
ob_start();<br>
curl_exec ($ch);<br>
curl_close ($ch);<br>
$result = ob_get_contents();<br>
ob_end_clean();<br>
var_dump($result);<br>
столкнувшись с этой проблемой:
Tor не является HTTP-прокси
Похоже, вы настроили свой веб-браузер на использование Tor в качестве HTTP-прокси. Это не правильно: Tor является SOCKS-прокси, а не HTTP-прокси. Пожалуйста, настройте ваш клиент соответственно.
Увидеть https://www.torproject.org/documentation.html для дополнительной информации.
Если кто-нибудь знает решение для этого, пожалуйста, помогите мне.
Заранее спасибо.
Это код, который я использую без инцидентов:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "http://localhost:9150/");
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
$result = curl_exec($ch);
Единственные видимые различия, которые я вижу, это localhost vs loopback, с префиксом http на CURLOPT_PROXY
и различные технические различия (многословные и т. д.). Я рекомендую установить тайм-аут, если вы собираетесь свернуть какие-либо луковые сайты, так как по моему опыту вы столкнетесь с блокировками нагрузки, которые оставляют соединение висящим.
Кроме того, убедитесь, что ваш прокси находится на правильном порту! В зависимости от того, как вы используете Tor, прокси может быть подключен к порту 9050, 9051, 9150 или 9151. Использование netstat
или аналогичная утилита (в комплекте с XAMPP для меня) или Process Hacker 2 (вкладка Network), чтобы посмотреть, что находится на каком порту. Tor.exe должен быть на одном из указанных портов. Используйте это для вашего прокси.
Я знаю, что у меня были некоторые проблемы с этим в прошлом. Удачи!
РЕДАКТИРОВАТЬ: полный тестовый код, чтобы играть с:
<?php
$url = (isset($_REQUEST['url']) ? $_REQUEST['url'] : "http://msydqstlz2kzerdg.onion/search/");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "http://localhost:9150/");
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
$output = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);
print_r($output);
print_r($curl_error);
?>
Других решений пока нет …