curl - curl 选项 CURLOPT_HTTPPROXYTUNNEL 是什么意思?

标签 curl http-proxy

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

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

curl_setopt($session, CURLOPT_HTTPPROXYTUNNEL, 1) 

更新:

我得到的是隧道引用了一个HTTP CONNECT METHOD,这是我所理解的:

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

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

最佳答案

没有CURLOPT_HTTPPROXYTUNNEL

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

示例步骤:

  1. HTTP GET/index.html 发送到 1.1.1.1(代理)
  2. 1.1.1.1 接收请求并解析 header 以获取 HTTP 请求的最终目的地。
  3. 1.1.1.1 将您的查询和 header 转发到 www.site.com(请求 header 中的目的地)
  4. 1.1.1.1将从www.site.com收到的回复写回给您

使用CURLOPT_HTTPPROXYTUNNEL

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

示例步骤:

  1. HTTP CONNECT 发送到 1.1.1.1
  2. 1.1.1.1 接收 HTTP CONNECT 并获取最终目的地的 IP/端口(HTTP CONNECT< 的 header 字段)/)。
  3. 1.1.1.1 通过与目标 2.22.63.73:80 (ip/www.site.com 端口)
  4. 1.1.1.1 通过将 TCP Socket 通过管道连接到打开 2.22.63.73:80< 的 TCP Socket 来创建隧道 然后写回 HTTP/1.1 200 Connectionbuilt 这意味着您的客户端现在可以让您的查询抛出 TCP 隧道(收到的 TCP 数据将直接传输到服务器,反之亦然)。

关于curl - curl 选项 CURLOPT_HTTPPROXYTUNNEL 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12288956/

相关文章:

node.js - 如何在代理请求时在 ExpressJS 中添加/删除响应 header

php - Curl - 无法使用 p12 证书连接

c++ - 如何获取 curlpp 响应头

python - 通过经过身份验证的 HTTP 代理建立 TCP 连接?

node.js - 使用 Node、Express、Ghost 和 http-proxy 防止重复请求

javascript - Node JS http-proxy - 创建 URL 的问题

python - 将curl命令从google-colab转换为python脚本

php - 如何使用 PHP 获取任何网站的 HTML 源代码?

http - 当请求有正文时,Go http 上下文无法捕获取消信号(curl, postman )

Android 模拟器 http-proxy SSL 握手失败