Programming Style

メニュー

初心者がアプリ開発者になるためのプログラミング学習サイト

[Android] HttpURLConnection:Basic認証を追加してHTTP通信する

android-common-top

ここでは、HttpURLConnectionを使ってBasic認証を使って通信する方法について説明します。

 

広 告

 

目次

前提条件

動作確認端末

  • Google Nexus 7 – 5.1.1 – API22(実機)

1. Basic認証設定を通信毎にする

 

Basic認証は、HTTPリクエストのヘッダフィールドとして追加されます。つまりURLConnection#setRequestPropery()を使ってHTTPリクエストにBasic認証用のヘッダを追加することで通信毎にBasic認証をを追加することができます。

 

HttpURLConnectionを使ってBasic認証を追加するコードは以下のとおりです。

 

Basic認証を通信毎にする

final String USERNAME   = "USERNAME";
final String PASSWORD   = "PASSWORD";

HttpURLConnection con = (HttpURLConnection) url.openConnection();
final String userPassword = USERNAME + ":" + PASSWORD;
final String encodeAuthorization = Base64.encodeToString(userPassword.getBytes(), Base64.NO_WRAP);
con.setRequestProperty("Authorization", "Basic " + encodeAuthorization);
con.connect();

 

"Authorization"というヘッダに、"Basic "という文字列にBase64でエンコードされたユーザ名とパスワードを追加した文字列を設定します。

 

Base64のエンコーダが、余計な改行を加えると無効になってしまうため、それを防ぐためにBase64.NO_WRAPというフラグを渡しています。

 

Nexus7端末を使ったHTTPリクエストのダンプ例を以下のとおりです。

 

Nexus7端末を使ったHTTPリクエストのダンプ例

GET / HTTP/1.1
Authorization: Basic dXNlcjp1c2Vy
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; Nexus 7 Build/LMY47V)
Host: xxx.xxx.xxx.xxx
Connection: Keep-Alive
Accept-Encoding: gzip

 

 

 

 

2. Basic認証をアプリ内でグローバルに設定する

 

アプリ内で実行されるリクエスト全体に対してBasic認証を追加したい場合は、Authenticatorを利用します。Authenticatorを使うと、アプリのプロセスで使うユーザ名とパスワードの証明をグローバルに設定することができます。

 

Basic認証をアプリ内でグローバルに設定するためには、リクエスト処理を実行する前に以下のコードを1回実行させておく必要があります。

 

Basic認証をアプリ内でグローバルに設定する

final String USERNAME   = "USERNAME";
final String PASSWORD   = "PASSWORD";
Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(USERNAME, PASSWORD.toCharArray());
    }
});

 

上記コードを実行することで、以降に生成されたURLConnectionPasswordAuthenticationインスタンスを使って認証するようになります。

 

 

 

広 告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です