如何使用 curl 和 php 连接到安全 (https) 代理?

Posted

技术标签:

【中文标题】如何使用 curl 和 php 连接到安全 (https) 代理?【英文标题】:How to connect to a secure (https) proxy with curl and php? 【发布时间】:2015-12-06 01:45:20 【问题描述】:

现代浏览器支持可通过 PAC 文件连接的 HTTPS 代理(如果您不熟悉,请参阅 https://www.igvita.com/2012/06/25/spdy-and-secure-proxy-support-in-google-chrome/)。

我正在尝试复制相同的内容并通过 php CURL 连接到这样的代理,但我只是得到一个空白响应,没有标题或内容。

我的代码如下:

$url = "http://checkip.dyndns.com";
$proxy = "proxy.domain.com:443";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL , 1);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'test:test');
curl_setopt($ch, CURLOPT_PROXYTYPE, "CURLPROXY_HTTP");
$response = curl_exec($ch);
curl_close($ch);

echo $response;

有什么想法吗?

【问题讨论】:

请查看***.com/questions/15445285/… 它不是 socks5 代理,所以我认为这行不通。代理服务器使用 squid 和 nghttpx (nghttp2.org/documentation/nghttpx-howto.html#http-2-proxy-mode) 通过 spdy 协议接受 https 连接 似乎 curl 中没有 http2(或 spdy)支持,所以我想目前不可能这样做:github.com/bagder/curl/blob/master/docs/ROADMAP.md :( 再看一下,curl 一年左右就支持http2了。 【参考方案1】:

如果有人感兴趣,解决方法是使用 spdycat 代替 curl:https://github.com/tatsuhiro-t/spdylay

【讨论】:

【参考方案2】:

目前尚不支持通过 HTTPS 与 curl 连接到代理。不过 git 中有一个正在进行中的分支:https://github.com/bagder/curl/tree/HTTPS-proxy

我们将感谢您帮助我们将其合并。

【讨论】:

以上是关于如何使用 curl 和 php 连接到安全 (https) 代理?的主要内容,如果未能解决你的问题,请参考以下文章

PHP Curl(带有 NSS)在连接到 https 时可能使用 SSLv3 而不是 TLS

如何使用 PHP 安全地连接到内部网络 SQLSRV 数据库?

PHP Curl 连接到 JsonRPCServer 无效的 Json

cURL 和 PHP 显示“1”

无法使用cURL连接到HTTPS站点怎么办

如何在 PHP CURL 中使用 ECDHE 密码?