【问题标题】:How to use a SOCKS 5 proxy with cURL?如何将 SOCKS 5 代理与 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);

【问题讨论】:

    标签: php curl proxy socks


    【解决方案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); 对我有用,谢谢
      猜你喜欢
      • 2014-05-19
      • 2021-05-22
      • 2012-10-18
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 2019-07-18
      • 2015-07-22
      • 2016-10-31
      相关资源
      最近更新 更多