DefaultHttpClientでBasic認証使ったアクセスを行う


「DefaultHttpClientを使ってコンテンツを取得する」でWeb上のコンテンツを取得する方法を説明しました。

DefalutHttpClientではURLを指定してコンテンツを取得することが可能ですが、場合によってはそのURLにアクセスするには認証が必要なことがあります。

今回はBasic認証が必要なURLにアクセスしてコンテンツを取得する方法を説明します。

それでは続きからどうぞ

認証情報とスコープ

DefalutHttpClientに認証情報(ユーザー名とパスワード)とその認証を行うスコープを設定することでBasic認証でのアクセスが可能になります。

認証情報(ユーザーIDとパスワード)はCredentialsインタフェースを実装したクラス、スコープはAuthScopeクラスが担います。

Credentialsインタフェースを実装したクラスには

  • NTCredentials:NTLM認証
  • UsernamePasswordCredentials:Basic認証

があります。

今回はBasic認証ですのでUsernamePasswordCredentialクラスを使います。

UsernamePasswordCredentialクラスのコンストラクタでユーザー名とパスワードを指定します。

public UsernamePasswordCredentials(String userName, String password)

次にAuthScopeクラスですが、コンストラクタは第1引数にはホストを、第2引数にはポート番号を指定します。

public AuthScope (String host, int port)

どのホストに対しても認証を行う場合には第1引数にnullを指定します。また、全てのポート番号に対して行う場合は第2引数に負の値を指定します。

サンプル

以下にサンプルを示します。

  • ユーザー名:HOGE
  • パスワード:foofoo
  • ホスト:www.hoge.ne.jp
  • ポート番号:80番
  • 取得するコンテンツ:www.hoge.ne.jp/hogehoge.text

まずは認証情報とスコープを設定します。

DefaultHttpClient httpClient = new DefaultHttpClient();
Credentials credentials = new UsernamePasswordCredentials("HOGE","foofoo");
AuthScope scope = new AuthScope("www.hoge.ne.jp", 80);
httpClient.getCredentialsProvider().setCredentials(scope, credentials);

これでBasic認証でのアクセスが可能になったのであとは通常の場合と同じです。

StringBuilder uri = new StringBuilder("http://www.hoge.ne.jp/hogehoge.txt");
HttpGet request = new HttpGet(uri.toString());
HttpResponse httpResponse = null;
try {
	httpResponse = httpClient.execute(request);
} catch (Exception e) {
	Log.d(TAG, "Error Execute");
}
One Comment