web-dev-qa-db-ja.com

HttpURLConnectionを使用してHTTP認証を処理する方法

私は、Java認証を必要とするHTTPサーバーにPOSTするクライアント)を書いています。
少なくとも次の3つの認証方法をサポートする必要があります:Basic、Digest、またはNegotiate。さらに、POSTは非常に大きい(2MB以上)ので、ストリーミングを使用する必要があります。 HttpURLConnection

出力ストリーミングが有効になっている場合、認証とリダイレクトは自動的に処理できません。認証またはリダイレクトが必要な場合、応答を読み取るときにHttpRetryExceptionがスローされます。

そのため、認証を自分で処理する必要があります。すでにコード化されたクラスを使用する方法を探して、もう一度検索しましたが、方法は見つかりませんでした...

here から必要なソースを抜き取ることができます(クラスパスの例外があるGPLv2であるため)。これは正しい方法ですか?

ありがとう。

33
Opher

出力ストリーミングが必要ですか? HttpURLConnectionは、Authenticatorクラスによる認証を最も確実にサポートします。 Http Authentication を参照してください。

更新:Authenticatorがオプションではない場合、HTTPリクエストに追加のヘッダーを追加することにより、HTTP基本認証を手動で実行できます。 。次のコードを試してください(未テスト):

String userPassword = username + ":" + password;
String encoding = new Sun.misc.BASE64Encoder().encode(userPassword.getBytes());
URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", "Basic " + encoding);
uc.connect();
49
Bruno De Fraine