curl选项CURLOPT_HTTPPROXYTUNNEL是什么意思?
在cURL文档中,有一个名为的选项,该选项被定义为在启用时通过代理创建隧道 然而,我不知道隧道是什么,它有什么作用。如果我不使用这样的隧道会有什么不同curl选项CURLOPT_HTTPPROXYTUNNEL是什么意思?,curl,http-proxy,Curl,Http Proxy,在cURL文档中,有一个名为的选项,该选项被定义为在启用时通过代理创建隧道 然而,我不知道隧道是什么,它有什么作用。如果我不使用这样的隧道会有什么不同 curl_setopt($session, CURLOPT_HTTPPROXYTUNNEL, 1) 更新: 我得到的是隧道指的是一种HTTP连接方法,我理解它的作用如下: 基于HTTP的隧道方法使用HTTP CONNECT方法/命令。客户端向HTTP代理发出HTTP CONNECT命令。然后,代理与特定的服务器:端口建立TCP连接,并在该服务
curl_setopt($session, CURLOPT_HTTPPROXYTUNNEL, 1)
更新:
我得到的是隧道指的是一种HTTP连接方法,我理解它的作用如下:
基于HTTP的隧道方法使用HTTP CONNECT方法/命令。客户端向HTTP代理发出HTTP CONNECT命令。然后,代理与特定的服务器:端口建立TCP连接,并在该服务器:端口和客户端连接之间中继数据。由于这会造成安全漏洞,支持连接的HTTP代理通常会限制对CONNECT方法的访问。代理仅允许访问特定授权服务器的白名单
所以,问题是,使用连接方法和不使用连接方法连接到代理之间有什么区别 无CURLOPT\u HTTPPROXYTUNNEL
没有CURLOPT\u HTTPPROXYTUNNEL
:您只需使用代理地址/端口作为HTTP请求的目标。代理将读取查询的HTTP头,将请求转发到目标(使用HTTP头),然后向您写入响应
示例步骤:
HTTP GET/index.html
发送到1.1.1.1(代理)
1.1.1.1
receive request和parse header以获取HTTP请求的最终目的地
1.1.1.1
将查询和标题转发到www.site.com(请求标题中的目的地)
1.1.1.1
将从www.site.com
带有CURLOPT\u HTTPPROXYTUNNEL
使用CURLOPT\u HTTPPROXYTUNNEL
:通过执行CONNECT
HTTP请求,请求代理直接打开到目的地的直接二进制连接(如HTTPS,称为TCP隧道
)。当隧道正常时,代理将向您回写一个已建立的HTTP/1.1200连接。当它收到你的浏览器开始直接查询目的地:代理不解析HTTP头,理论上也不读取隧道数据,它只是转发它,这就是为什么它被称为隧道
示例步骤:
HTTP连接
发送至1.1.1.1
1.1.1.1
接收HTTP连接
并获取最终目的地的ip/端口(HTTP连接
的标题
字段)
1.1.1.1
通过与目的地进行TCP握手2.22.63.73:80(www.site.com的ip/port)
打开TCP套接字李>
1.1.1.1
通过管道将您的TCP套接字
连接到打开到2.22.63.73:80的TCP套接字
,创建一个隧道,然后回写HTTP/1.1200连接已建立
,这意味着您的客户端现在可以让您的查询抛出TCP隧道
(接收到的TCP数据将直接传输到服务器,反之亦然)
好的,我现在得到的是,它调用一个HTTP CONNECT方法,这里是HTTP CONNECT的作用:另一个基于HTTP的隧道方法使用HTTP CONNECT方法/命令。客户端向HTTP代理发出HTTP CONNECT命令。然后代理与特定的服务器:端口建立TCP连接,并在该服务器:端口和客户端conn之间中继数据由于这会造成安全漏洞,支持连接的HTTP代理通常会限制对CONNECT方法的访问。代理只允许访问特定授权服务器的白名单。因此,问题是,如果没有itI,有什么区别?我应该提到,在使用代理服务器(如Squid3)时,可以在配置文件中限制将方法连接到SSL(加密)端口。这是许多服务器使用的默认开箱即用配置。但是,如果修改Squid配置以允许在未加密的端口(例如80)上连接,您还可以对http://
URL使用CONNECT
。为避免混淆,请注意,除非对隧道进行加密(如https://请求),否则代理可以读取隧道数据。没有任何东西可以阻止代理检查您发送和接收的所有内容。只有端到端加密才能确保数据安全。