クラスorg.Apache.http.authをチェックアウトしています。誰かが持っている場合、それ以上の参照や例はありますか?
以前にその特定のパッケージに出会ったことはありませんが、クライアント側のHTTP認証用であり、Androidを使用してJava.net
次のようなAPI:
Authenticator.setDefault(new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("myuser","mypass".toCharArray());
}});
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
c.setUseCaches(false);
c.connect();
明らかに、getPasswordAuthentication()はおそらく定数を返すよりもインテリジェントな処理を行う必要があります。
認証付きのボディ(例:POST
)でリクエストを作成しようとしている場合、 Android issue 4326 に注意してください。そこに提案された修正をプラットフォームにリンクしましたが、基本認証のみが必要な場合は簡単な回避策があります:Authenticatorに煩わされず、代わりにこれを行います:
c.setRequestProperty("Authorization", "basic " +
Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
私にとっては、うまくいきました。
final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);
Apache HttpCLient:
request.setHeader("Authorization", basicAuth);
HttpUrlConnection:
connection.setRequestProperty ("Authorization", basicAuth);
リクエストに手動でhttpヘッダーを挿入できます:
HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));
手動メソッドは、Android.util.Base64のインポートでうまく機能しますが、エンコードの呼び出し時にBase64.NO_WRAPを設定するようにしてください。
String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);
これは私のために働く
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) imageUrl
.openConnection();
conn.setRequestProperty("Authorization", "basic " +
Base64.encode("username:password".getBytes()));
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is = conn.getInputStream();