我正在尝试使用以下PHP代码连接到Tor隐藏服务:
$url = 'http://jhiwjjlqpyawmpjx.onion/'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:9050/");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$output = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);
print_r($output);
print_r($curl_error);
运行它时,出现以下错误:
无法解析主机名
但是,当我从Ubuntu中的命令行运行以下命令时:
curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion
我得到预期的回应
PHP cURL文档说:
--socks5-hostname
Use the specified SOCKS5 proxy (and let the proxy resolve the host name).
我相信它可以从命令行运行的原因是因为Tor(代理)正在解析它可以识别的.onion主机名。当运行上面的PHP代码时,我的猜测是cURL或PHP正在尝试解析.onion主机名,但无法识别它。我一直在寻找一种方法来告诉cURL / PHP让代理解析主机名,但是我找不到方法。
有一个非常相似的Stack Overflow问题,使用PHP时使用socks5代理进行的cURL请求失败,但可通过命令行运行。
forward-socks5 / localhost:9150 .