使用Tor与Curl时遇到问题

时间:2014-10-21 11:56:05

标签: php curl proxy socks opentor

使用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

如果有人知道解决方案,请帮助我。

提前致谢。

1 个答案:

答案 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);
?>