在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标头),然后将响应写入您.
示例步骤:
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:您要求代理TCP Tunnel通过执行CONNECTHTTP请求直接打开到目的地的直接二进制连接(如HTTPS,称为a ).当隧道没问题时,代理会给你写回一个HTTP/1.1 200 Connection established.当它收到你的浏览器开始直接查询目的地:代理不解析HTTP头,理论上不读取隧道数据,它只是转发它,这就是为什么它被称为隧道!
示例步骤:
HTTP CONNECT 寄去 1.1.1.11.1.1.1接收HTTP CONNECT并获取最终目的地的IP /端口(header字段HTTP CONNECT).1.1.1.1打开TCP Socket通过执行TCP handshake到目的地2.22.63.73:80 (ip/port of www.site.com).1.1.1.1通过将你的管道铺设TCP Socket到TCP Socket打开的地方来建立一个隧道2.22.63.73:80然后写回你的HTTP/1.1 200 Connection established意思是你的客户现在可以让你的查询抛出TCP Tunnel(收到的TCP数据将直接传输到服务器,反之亦然).| 归档时间: |
|
| 查看次数: |
12980 次 |
| 最近记录: |