Curl CURLOPT_代理功能

Curl CURLOPT_代理功能,curl,proxy,libcurl,Curl,Proxy,Libcurl,我想知道curl的CURLOPT_PROXY选项(详细说明)是如何实现的,特别是关于http的 这适用于将要发送的http消息的标题是什么?它是否也执行其他请求,例如握手或任何类似的请求 谢谢 HTTP 当curl使用HTTP代理执行HTTP传输时,它连接到代理而不是远程服务器,并将其请求发送到代理,就像它是服务器一样(只有很小的区别): 当对代理执行操作时,请求URI始终是绝对的。Ie URI将包含远程服务器的主机名 代理的身份验证头与服务器的身份验证头不同 curl明确要求keep-aliv

我想知道curl的
CURLOPT_PROXY
选项(详细说明)是如何实现的,特别是关于http的

这适用于将要发送的http消息的标题是什么?它是否也执行其他请求,例如握手或任何类似的请求

谢谢

HTTP 当curl使用HTTP代理执行HTTP传输时,它连接到代理而不是远程服务器,并将其请求发送到代理,就像它是服务器一样(只有很小的区别):

  • 当对代理执行操作时,请求URI始终是绝对的。Ie URI将包含远程服务器的主机名
  • 代理的身份验证头与服务器的身份验证头不同
  • curl明确要求keep-alive(仅用于遵守仍然部署在野外的旧的愚蠢代理)
  • 如果我们在localhost:80上运行代理,并且希望通过代理下载:

    curl -x localhost:80 http://example.com
    
    curl连接到TCP端口80上的本地主机,并发送以下请求:

    GET http://example.com/ HTTP/1.1
    Host: example.com
    User-Agent: curl/7.54.1
    Accept: */*
    Proxy-Connection: Keep-Alive
    
    然后,代理将向目标服务器(example.com)发送一个HTTP请求,如下所示:

    GET / HTTP/1.1
    Host: example.com
    User-Agent: curl/7.54.1
    Accept: */*
    
    (在我使用Apache作为代理服务器的测试中,代理还将包括一个到远程服务器的
    连接:close
    头,但这不一定是您的代理将发送的。)

    curl的现代版本允许用户单独设置自定义头,如果它们应该转到代理、服务器或两者

    HTTPS
    如果您改为通过HTTP代理请求HTTPS传输,curl将改为使用CONNECT方法请求通过代理的隧道,一旦建立到远程服务器的隧道,curl将与服务器握手TLS,然后通过TLS连接发出HTTP请求,与在没有涉及代理的情况下发出HTTP请求的方式完全相同。

    如何告知代理将请求转发到哪里?在请求(GET)行中。我扩展了我的答案,加入了一个更好的例子。我已经给出了答案,因为这正是我想要的信息!但是出于好奇,您是否认为可以添加一些信息来显示发送到代理的http头与发送到最终地址的http头有何不同?例如,您能否演示如何将
    User-Agent:curl/7.54.1
    发送到代理,而将
    User-Agent:Something
    发送到服务器?