Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
curl选项CURLOPT_HTTPPROXYTUNNEL是什么意思?_Curl_Http Proxy - Fatal编程技术网

curl选项CURLOPT_HTTPPROXYTUNNEL是什么意思?

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文档中,有一个名为的选项,该选项被定义为在启用时通过代理创建隧道

然而,我不知道隧道是什么,它有什么作用。如果我不使用这样的隧道会有什么不同

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://请求),否则代理可以读取隧道数据。没有任何东西可以阻止代理检查您发送和接收的所有内容。只有端到端加密才能确保数据安全。