普通代理(例如:72.41.132.22:3128
)与cURL配合得很好,但是当我使用带有用户名/密码的SOCKS 5代理时,它只是在页面上给我“[1”。
有没有办法将SOCKY 5代理与cURL一起使用?
$proxy = "cagsan:jw22wdw@108.61.25.223:34792";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 1);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
答案 0 :(得分:36)
您需要告诉cURL代理是SOCKS5代理,否则cURL假定它是HTTP代理:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
来自docs:
CURLOPT_PROXYTYPE
CURLPROXY_HTTP(默认)或CURLPROXY_SOCKS5。
答案 1 :(得分:18)
自cURL 7.21.7起,您可以使用CURLOPT_PROXY
并指定SOCKS协议:
curl_setopt($ch, CURLOPT_PROXY, 'socks5://bob:marley@localhost:12345');
libcurl documentation中的更多信息。
答案 2 :(得分:1)
对于那些希望通过主机名(localhost?)进行连接而且无法与CURLPROXY_SOCKS5
一起使用的人,可以试试CURLPROXY_SOCKS5_HOSTNAME
。
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
在某些早期的PHP版本中,您必须执行以下操作:
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);