WinHTTP リクエストが 407 を受け取ったら、WinHttpQueryAuthSchemes を使って提示された方式を調べ、クライアントとアカウントの両方がサポートする方式を 1 つ選びます。そのリクエストに資格情報を設定します:

WinHttpSetCredentials(
    requestHandle,
    WINHTTP_AUTH_TARGET_PROXY,
    selectedScheme,
    proxyUser,
    proxyPassword,
    nullptr);

最後の予約済み引数は null でなければなりません。ブール値の結果を確認し、失敗した場合は GetLastError を確認します。成功は API が設定を受け入れたことを意味し、プロキシがログインを受け入れたことを意味しません。

制御された認証フローで再送信し、応答を確認します。再試行は上限を設けます。操作を繰り返す場合は、消費済みのリクエスト本文ストリームを再生できる必要があります。宛先の 401 は WINHTTP_AUTH_TARGET_SERVER を使用し、このプロキシターゲットとは異なります。

この資格情報は 1 つのリクエストにのみ適用されます。WinHTTP はこれを後続のリクエスト用の汎用資格情報ストアにはしません。再利用された認証済み接続は別のチャレンジを一時的に隠すことがあるため、アプリケーションは将来のチャレンジにも引き続き対処する必要があります。

プロキシの選択は分けて扱います。資格情報を含むアドレス文字列はこのリクエストハンドル API の代わりにはならず、エンドポイントに到達できたからといって認証が完了するわけでもありません。

関連記事