添加到 http.Request.Header 的头部描述的是目标请求。当 HTTPS 使用 HTTP 代理时,transport 会先执行 CONNECT。目标请求的头部并不是用于那次更早交换的通用配置 API。

对于代理要求的静态头部,请配置 transport 的 ProxyConnectHeader:

transport := &http.Transport{
    Proxy: http.ProxyURL(proxyURL),
    ProxyConnectHeader: http.Header{
        "X-Proxy-Account": []string{"example-account"},
    },
}

这里的 proxyURL 是解析后的端点 URL。该头部只是示例,只有在代理运营方定义了这样的字段时才有用。

对于按代理或目标选择的值,请使用 GetProxyConnectHeader。文档中说明的回调会收到代理 URL 和 CONNECT 目标。当该回调不为 nil 时,静态的 ProxyConnectHeader 字段会被忽略。

让值保持在预期的范围内。只用于代理的账号标记属于与代理的交换;网站的授权值属于目标请求。如果回调无法生成所需的握手值,应返回其错误,而不是悄悄发送一个配置不同的请求。

这些设置用于定制 CONNECT 的处理方式。它们不会发明自定义认证协议,也不会改变代理服务的访问策略。

相关文章