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 フィールドは無視されます。

値は意図した範囲に保ちます。プロキシ専用のアカウント標識はプロキシとのやり取りに属し、Web サイトの認可値は宛先リクエストに属します。コールバックが必要なハンドシェイク値を生成できない場合は、黙って別の設定のリクエストを送るのではなく、そのエラーを返します。

これらの設定は CONNECT の扱いをカスタマイズします。独自の認証プロトコルを発明したり、プロキシサービスのアクセス ポリシーを変えたりするものではありません。

関連記事