卷曲选项CURLOPT_HTTPPROXYTUNNEL是什么意思?

时间:2012-09-05 20:07:00

标签: 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方法连接代理有什么区别?

1 个答案:

答案 0 :(得分:19)

没有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
  5. 的回复

    使用CURLOPT_HTTPPROXYTUNNEL

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

    示例步骤:

    1. HTTP CONNECT已发送至1.1.1.1
    2. 1.1.1.1收到HTTP CONNECT并获取最终目的地的{/ 1}} header字段的IP /端口。
    3. HTTP CONNECT通过1.1.1.1向目的地TCP Socket开启TCP handshake
    4. 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数据将直接传输到服务器,反之亦然)。