Tor不是HTTP代理

jun*_*joi 5 curl tor ubuntu-12.04

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

HTTP/1.0 501 Tor不是HTTP代理内容类型:text/html; 字符集= 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);
Run Code Online (Sandbox Code Playgroud)

需要帮助我缺少的东西.我已经尝试过了

curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
Run Code Online (Sandbox Code Playgroud)

请求正在加载,会话过期而没有结果.

dre*_*010 8

确实如此,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);
Run Code Online (Sandbox Code Playgroud)

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

如果编译的cURL版本小于7.18.0,则它不支持带有主机名查找的SOCSK5,因此您必须回退CURLPROXY_SOCKS5并知道您的DNS查找不会超过Tor并且可能会暴露.

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