私は、Java認証を必要とするHTTPサーバーにPOSTするクライアント)を書いています。
少なくとも次の3つの認証方法をサポートする必要があります:Basic、Digest、またはNegotiate。さらに、POSTは非常に大きい(2MB以上)ので、ストリーミングを使用する必要があります。 HttpURLConnection
出力ストリーミングが有効になっている場合、認証とリダイレクトは自動的に処理できません。認証またはリダイレクトが必要な場合、応答を読み取るときにHttpRetryExceptionがスローされます。
そのため、認証を自分で処理する必要があります。すでにコード化されたクラスを使用する方法を探して、もう一度検索しましたが、方法は見つかりませんでした...
here から必要なソースを抜き取ることができます(クラスパスの例外があるGPLv2であるため)。これは正しい方法ですか?
ありがとう。
出力ストリーミングが必要ですか? 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();