如何将 SOCKS 5 代理与 cURL 一起使用?
Posted
技术标签:
【中文标题】如何将 SOCKS 5 代理与 cURL 一起使用?【英文标题】:How to use a SOCKS 5 proxy with cURL? 【发布时间】:2012-11-06 20:09:32 【问题描述】:普通代理(例如:72.41.132.22:3128
)适用于 cURL,但是当我使用带有用户名/密码的 SOCKS 5 代理时,它只会在页面上给我“[1”。
有没有办法通过 cURL 使用 SOCKY 5 代理?
$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);
【问题讨论】:
【参考方案1】:您需要告诉 cURL 代理是 SOCKS5 代理,否则 cURL 会假定它是 HTTP 代理:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
来自docs:
CURLOPT_PROXYTYPE
CURLPROXY_HTTP(默认)或 CURLPROXY_SOCKS5。
【讨论】:
正如@Gido 提到的,您可以跳过此参数并使用带有前缀socks5://
的CURLOPT_PROXY
,一切顺利。 docs【参考方案2】:
从 cURL 7.21.7 开始,您可以使用 CURLOPT_PROXY
并指定 SOCKS 协议:
curl_setopt($ch, CURLOPT_PROXY, 'socks5://bob:marley@localhost:12345');
更多信息在libcurl documentation。
【讨论】:
【参考方案3】:对于那些希望通过主机名(本地主机?)进行连接的用户,并且它不适用于 CURLPROXY_SOCKS5
,您可以尝试使用 CURLPROXY_SOCKS5_HOSTNAME
。
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
在一些较早的 php 版本中,您必须这样做:
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
【讨论】:
curl.haxx.se/libcurl/c/CURLOPT_PROXY.html - CURLPROXY_SOCKS5_HOSTNAME 表示主机名解析应该由 socks 服务器执行。 我的 PHP 版本PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
和 curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
对我有用,谢谢以上是关于如何将 SOCKS 5 代理与 cURL 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章