Curl:如何在使用代理时发送自定义标头

dan*_*ndi 1 curl

我想在使用代理时将自定义标头发送到主机。看看下面的例子。用例子解释情况更容易。

这按预期工作正常:

curl https://www.cloudflare.com/
Run Code Online (Sandbox Code Playgroud)

当我选择通过向curl提供主机的IP地址来避免使用DNS时:

curl http://198.41.214.163/
Run Code Online (Sandbox Code Playgroud)

网站给我这个错误页面 -->

不允许直接 IP 访问。您请求的 IP 地址属于 CloudFlare 网络的一部分。必须提供有效的主机标头 才能访问所需的网站。”


如果我们提供正确的主机头名称,它将在不使用 DNS 的情况下再次正常工作:

curl --header "Host: cloudflare.com" http://198.41.214.163/
Run Code Online (Sandbox Code Playgroud)

但是,当我在使用代理隧道时执行相同操作时,curl 不会将标头发送到主机,因此我收到来自主机的“不允许直接 IP 访问”错误:

curl --proxy "http://PROXY_IP:PORT" --header "Host: cloudflare.com" http://198.41.214.163/
Run Code Online (Sandbox Code Playgroud)

我怎样才能克服这个问题?

cwe*_*ske 5

这个问题应该在 cURL 7.37.0 中消失,它引入了--proxy-header参数来指定用于代理服务器的标头。用-H/给出的标头--header现在将被视为“仅限终端服务器”。