如何使用带有cURL的SOCKS 5代理?

时间:2012-11-18 21:22:37

标签: php curl proxy socks

普通代理(例如: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);

3 个答案:

答案 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);