curl 选项 CURLOPT_HTTPPROXYTUNNEL 是啥意思?

Posted

技术标签:

【中文标题】curl 选项 CURLOPT_HTTPPROXYTUNNEL 是啥意思?【英文标题】:What does the curl option CURLOPT_HTTPPROXYTUNNEL mean?curl 选项 CURLOPT_HTTPPROXYTUNNEL 是什么意思? 【发布时间】:2012-08-30 14:48:03 【问题描述】:

在 cURL 文档中,有一个名为 CURLOPT_HTTPPROXYTUNNEL 的选项被定义为在启用时通过代理创建隧道。

但是,我不知道隧道是什么以及它的作用。如果我不使用这样的隧道会有什么不同?

curl_setopt($session, CURLOPT_HTTPPROXYTUNNEL, 1) 

更新:

我得到的是隧道指的是HTTP CONNECT METHOD,这是我理解的:

基于 HTTP 的隧道方法使用 HTTP CONNECT 方法/命令。客户端向 HTTP 代理发出 HTTP CONNECT 命令。然后代理与特定的服务器:端口建立 TCP 连接,并在该服务器:端口和客户端连接之间中继数据。因为这会造成安全漏洞,支持 CONNECT 的 HTTP 代理通常会限制对 CONNECT 方法的访问。代理只允许访问特定授权服务器的白名单。

那么,问题是,使用和不使用 CONNECT 方法连接到代理有什么区别?

【问题讨论】:

***.com/questions/4802816/… 好吧,我现在得到的是它调用 HTTP CONNECT METHOD,而这里 HTTP CONNECT 做了什么:另一种基于 HTTP 的隧道方法使用 HTTP CONNECT 方法/命令。客户端向 HTTP 代理发出 HTTP CONNECT 命令。然后代理与特定的服务器:端口建立 TCP 连接,并在该服务器:端口和客户端连接之间中继数据。因为这会造成安全漏洞,支持 CONNECT 的 HTTP 代理通常会限制对 CONNECT 方法的访问。代理只允许访问特定授权服务器的白名单。所以问题是没有它有什么区别 我应该提一下,当使用代理服务器如 Squid3 时,您可以在配置文件中将连接方法限制为 SSL(加密)端口。这是许多服务器使用的默认开箱即用配置。但是,如果将 Squid 配置修改为 allow CONNECT 在未加密端口(例如 80)上,您也可以将 CONNECT 用于 http:// url 就好了。 【参考方案1】:

没有CURLOPT_HTTPPROXYTUNNEL

没有 CURLOPT_HTTPPROXYTUNNEL :您只需使用代理地址/端口作为 HTTP 请求的目标。代理将读取您查询的 HTTP 标头,将您的请求转发到目的地(使用您的 HTTP 标头),然后将响应写入您。

示例步骤:

    HTTP GET /index.html 发送至1.1.1.1 (proxy) 1.1.1.1 接收请求并解析标头以获取 HTTP 请求的最终目的地。 1.1.1.1 将您的查询和标题转发到 www.site.com (destination in request headers)1.1.1.1 回复您收到的来自www.site.com 的回复

CURLOPT_HTTPPROXYTUNNEL

使用CURLOPT_HTTPPROXYTUNNEL :您要求代理通过CONNECT HTTP 请求直接打开到您的目的地的直接二进制连接(如HTTPS,称为TCP Tunnel)。当隧道正常时,代理会写回HTTP/1.1 200 Connection established。当它收到你的浏览器开始直接查询目的地时:代理不解析HTTP头,理论上不读取隧道数据,它只是转发它,这就是为什么它被称为隧道!

示例步骤:

    HTTP CONNECT 发送至1.1.1.1 1.1.1.1 接收 HTTP CONNECT 并获取最终目的地的 IP/端口(@98​​7654340@ 的header 字段)。 1.1.1.1 通过TCP handshake 到您的目的地2.22.63.73:80 (ip/port of www.site.com) 打开TCP Socket1.1.1.1 通过将您的TCP Socket 管道连接到打开到2.22.63.73:80TCP Socket 来创建隧道,然后将您写回HTTP/1.1 200 Connection established 女巫意味着您的客户端现在可以让您的查询抛出TCP Tunnel(收到的TCP 数据将直接传输到服务器,反之亦然)。

【讨论】:

为避免混淆,请注意代理 CAN 可以正常读取隧道数据,除非隧道已加密(如 https:// 请求的情况)。没有什么可以阻止代理检查您发送和接收的所有内容。只有端到端加密才能确保您的数据安全。

以上是关于curl 选项 CURLOPT_HTTPPROXYTUNNEL 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

curl常用选项详解

curl 选项 CURLOPT_HTTPPROXYTUNNEL 是啥意思?

curl_setopt的选项的值

为啥 curl 无法使用选项 -i 显示 http 标头

curl几个选项

HTTPie 是不是有相当于 curl 的 -d 选项?