22

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

3 回答 3

48

您需要告诉 cURL 代理是 SOCKS5 代理,否则 cURL 假定它是 HTTP 代理:

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

文档

CURLOPT_PROXYTYPE

CURLPROXY_HTTP(默认)或 CURLPROXY_SOCKS5。

于 2012-11-18T21:26:49.500 回答
29

从 cURL 7.21.7 开始,您可以使用CURLOPT_PROXY和指定 SOCKS 协议:

curl_setopt($ch, CURLOPT_PROXY, 'socks5://bob:marley@localhost:12345');

libcurl 文档中的更多信息。

于 2014-05-28T20:39:22.837 回答
3

对于那些希望通过主机名(localhost?)进行连接的人,并且它无法使用CURLPROXY_SOCKS5,您可以尝试CURLPROXY_SOCKS5_HOSTNAME.

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

在一些较早的 PHP 版本中,您必须执行以下操作:

curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
于 2015-09-11T01:55:41.003 回答