【问题标题】:Tor is not an HTTP ProxyTor 不是 HTTP 代理
【发布时间】:2016-08-15 06:34:35
【问题描述】:

我使用云服务器 Ubuntu 12.04 作为 tor 代理服务器来进行报废。我现在面临的问题是显示错误

HTTP/1.0 501 Tor 不是 HTTP 代理 Content-Type: text/html; charset=iso-8859-1

$url = 'http://whatismyipaddress.com';
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$ch = curl_init('http://whatismyipaddress.com'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
curl_setopt($ch, CURLOPT_PROXY, 'https://127.0.01:9050/'); 
curl_exec($ch); 
curl_close($ch);

$result=curl_exec($ch);

需要帮助我缺少的东西。 我已经尝试使用了

curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

一个请求正在加载,会话过期没有结果。

【问题讨论】:

    标签: curl ubuntu-12.04 tor


    【解决方案1】:

    这是真的,Tor 不是 HTTP 代理,而是 SOCKS v5 代理。

    根据您的 cURL 选项 CURLOPT_HTTPPROXYTUNNEL,您告诉 cURL 尝试错误地使用 Tor 的代理(作为 HTTP 代理)。

    正确的方法是去掉代理隧道选项,只设置代理和SOCKS代理类型:

    $proxy = '127.0.0.1:9050';  // no https:// or http://; just host:port
    curl_setopt($ch, CURLOPT_PROXY, $proxy);
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
    

    如果你没有 PHP 5.5.23 或更高版本(引入CURLPROXY_SOCKS5_HOSTNAME),你可以使用curl_setopt($ch, CURLOPT_PROXYTYPE, 7);

    如果 PHP 编译时使用的 cURL 版本低于 7.18.0,它不支持 SOCSK5 进行主机名查找,因此您必须回退到 CURLPROXY_SOCKS5 并知道您的 DNS 查找将 越过 Tor 并可能被暴露。

    旁注:我编写了一个名为TorUtils 的PHP 库,它提供了许多用于在PHP 中与Tor 交互的类。提供的一类是TorCurlWrapper,它抽象了上述逻辑并强制 cURL 正确使用 Tor 的 SOCKS 代理。有一个用法示例here。您可以使用composer require dapphp/torutils 或通过下载包并将其添加到您的代码来安装库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      相关资源
      最近更新 更多