使用 HTTPS 和代理时,我可以避免使用 cURL 发出 CONNECT 请求吗?

Fab*_*les 5 https proxy curl

HTTP请求

当您使用代理发出 HTTP cURL 请求时,您将执行以下操作:

curl -x http://myproxy:8888 http://github.com
Run Code Online (Sandbox Code Playgroud)

cURL 向代理 myproxy:8888 发送一个 HTTP 请求,该代理创建一个到http://github.com的新 HTTP 请求

The request content is :
GET /
Host: myproxy:8888
Location: http://github.com
Run Code Online (Sandbox Code Playgroud)

HTTPS 连接

当您使用代理发出 HTTPS cURL 请求时,您将执行以下操作:

curl -x http://myproxy:8888 https://github.com
Run Code Online (Sandbox Code Playgroud)

cURL 向代理 myproxy:8888 发送 CONNECT 请求,这会在您和 github 之间创建 TCP 隧道。所有 SSL 协商均在您和 github 之间进行。

HTTPS 请求

我想在没有 CONNECT 的情况下使用代理发出 HTTPS cURL 请求。我想为 HTTPS URL 的代理创建 HTTP 请求。

请求内容将是:

GET /
Host: myproxy:8888
Location: **https**://github.com
Run Code Online (Sandbox Code Playgroud)

是否可以 ?这个怎么做 ?

Dan*_*erg 3

不,这是不可能的,因为 CONNECT 是您用来通过 HTTP 代理执行 HTTPS 的方法。移交控制权就等于放弃安全性和隐私性,而这是 HTTPS 首先要提供的两件事。

几天前,我还在curl 邮件列表上回答了这个问题,时间稍长一些。

列表中的一个后续问题是,我们是否可以想象提供一个选项,允许在未来版本中通过代理执行 HTTPS,是的,只要有人为所述新选项编写代码,我们就可以做到这一点。