Apache HttpClient 4.2: プロキシの AuthCache をリクエストコンテキストに保持する
HttpClient 4.2 のプロキシ Basic 認証キャッシュを、後続のリクエストが使うのと同じ実行コンテキストに保持します。
旧来の HttpClient 4.2.2 アプリケーションでは、資格情報プロバイダーと認証キャッシュは別の役割を担います。プロバイダーはアカウントを供給し、キャッシュは意図的に事前設定した認証スキームが次のチャレンジの前に参加できるようにします。
プロキシ専用の旧 BasicScheme コンストラクターでは、受け渡しは次のようになります。
AuthCache cache = new BasicAuthCache();
cache.put(proxy, new BasicScheme(ChallengeState.PROXY));
HttpContext context = new BasicHttpContext();
context.setAttribute(ClientContext.AUTH_CACHE, cache);
HttpResponse response = client.execute(request, context);この断片は、client が対応するプロキシ経路と資格情報プロバイダーをすでに持っていることを前提としています。proxy がその HttpHost であり、request が実際の操作です。キャッシュのキーは、宛先サイトではなくその仲介者を表す必要があります。
値を入れたコンテキストを execute に渡します。構築したうえで別のコンテキストを生成するオーバーロードを使うと、キャッシュは交換の外に置かれます。その認証状態を共有したい後続の操作では、毎回空のコンテキストを作り直すのではなく、適切なコンテキストを保持してください。
明示的な PROXY 状態はこの古い API に属します。TARGET は宛先の認証に関するものです。新しい世代の HttpClient ではパッケージと認証 API が変わったため、これは新規クライアント向けのレシピではなく、既存の 4.2 コード向けの保守指針として使ってください。
通常のチャレンジ駆動型の交換は依然として正しい場合があります。Basic 認証を事前に設定するのは、既知の意図したプロキシに対してのみにしてください。また、次の操作が接続を必要とする前に、各レスポンスを消費するか解放してください。有用な結果は、実際にリクエストを送る実行に結び付いたアカウントとキャッシュ済みスキームです。