使用Tor with 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>
当我使用它然后面对这个错误:
无法完成与0.0.0.0:0的SOCKS5连接。 (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代理
您似乎已将Web浏览器配置为使用Tor作为HTTP代理。这是不正确的:Tor是SOCKS代理,而不是HTTP代理。请相应地配置您的客户。 有关详细信息,请参阅https://www.torproject.org/documentation.html。
如果有人知道解决方案,请帮助我。
提前致谢。
答案 0 :(得分:0)
这是我正在使用的代码:
$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,CURLOPT_PROXY
上的http前缀,以及各种技术差异(详细等)。如果您要卷起任何洋葱网站,我建议您设置超时时间,因为根据我的经验,您会遇到导致连接挂起的加载块。
另外,请确保您的代理实际上在正确的端口上!根据您使用Tor的方式,代理可以在端口9050,9051,9150或9151上。使用netstat
或类似的实用程序(与XAMPP捆绑在一起)或Process Hacker 2(网络选项卡) )看看什么是什么端口。 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);
?>