我正在尝试使用带有curl和PHP的socks5代理从我的API接收数据。
但无论我尝试什么,我都会收到此错误
Received invalid version in initial SOCKS5 response
我已经尽我所能尝试谷歌,但没有找到解决办法。我尝试了他们列出的所有解决方案,但都返回此错误。
这是我当前的代码
<?php
function fetchContent($url) {
$proxy = 'socks5h://domain.com:22';
$proxyAuth = 'username:password';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyAuth);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
}
fetchContent('https://ipinfo.io/ip');
?>
作为额外信息,我在笔记本电脑上通过 SSH 使用相同的ocks5代理,并通过 putty 隧道进行连接,效果很好。
默认情况下,curl 使用
CURLPROXY_HTTP
作为 CURLOPT_PROXYTYPE
选项。
要使用
socks5h
,您需要将 CURLOPT_PROXYTYPE
设置为 CURLPROXY_SOCKS5_HOSTNAME
<?php
# ... your code ...
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
# ... your code ...
附注考虑从代理地址定义中删除协议
<?php
$proxy = 'domain.com:22';