卷曲选项CURLOPT_HTTPPROXYTUNNEL是什么意思?

Ate*_*tef 7 curl http-proxy

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

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

curl_setopt($session, CURLOPT_HTTPPROXYTUNNEL, 1) 
Run Code Online (Sandbox Code Playgroud)

更新:

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

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

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

Ifn*_*not 20

没有 CURLOPT_HTTPPROXYTUNNEL

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

示例步骤:

  1. HTTP GET /index.html 寄去 1.1.1.1 (proxy)
  2. 1.1.1.1 接收请求和解析标头以获取HTTP请求的最终目的地.
  3. 1.1.1.1将您的查询和标题转发给www.site.com (destination in request headers).
  4. 1.1.1.1 回复给你的回复 www.site.com

CURLOPT_HTTPPROXYTUNNEL

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

示例步骤:

  1. HTTP CONNECT 寄去 1.1.1.1
  2. 1.1.1.1接收HTTP CONNECT并获取最终目的地的IP /端口(header字段HTTP CONNECT).
  3. 1.1.1.1打开TCP Socket通过执行TCP handshake到目的地2.22.63.73:80 (ip/port of www.site.com).
  4. 1.1.1.1通过将你的管道铺设TCP SocketTCP Socket打开的地方来建立一个隧道2.22.63.73:80然后写回你的HTTP/1.1 200 Connection established意思是你的客户现在可以让你的查询抛出TCP Tunnel(收到的TCP数据将直接传输到服务器,反之亦然).

  • 为了避免混淆,请注意代理**CAN**读取隧道数据就好了,除非隧道是加密的(如https://请求的情况).没有什么能阻止代理检查您发送和接收的所有内容.只有端到端加密才能确保您的数据安全. (4认同)