Go の CONNECT ヘッダーを Transport に置く
CONNECT 中に必要なヘッダーを HTTP プロキシへ送り、宛先リクエストには付けないようにします。
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 の扱いをカスタマイズします。独自の認証プロトコルを発明したり、プロキシサービスのアクセス ポリシーを変えたりするものではありません。