AndroidでHTTP認証を行うにはどうすればよいですか?
-
21-09-2019 - |
質問
クラスorg.apache.http.authをチェックしています。誰かが持っている場合、これ以上の参照や例はありますか?
解決
私は以前にその特定のパッケージに会ったことがありませんが、それはクライアント側のHTTP認証のためのものであると言っています。 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. 。提案された修正をプラットフォームにリンクしましたが、基本的な認証のみが必要な場合は簡単な回避策があります。
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);
私のAndroidプロジェクトでは、ここからbase64ライブラリを使用しました。
これは非常に広範な図書館であり、これまでのところ問題はありませんでした。
これは私のために働きます
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();
所属していません StackOverflow