DefaultHttpClientを使ってコンテンツを取得する


今回はDefaultHttpClientを使ってコンテンツを取得する方法を説明します。
DefaultHttpClientではHTTPリクエスト(GetやPut)を発行することができま

「XMLをパース(解析)する」の中で紹介したサンプルを、DefaultHttpClientを使って取得したコンテンツをパースするものに修正してみます。

前準備

以前のサンプルからStringとして用意したXMLをパースする箇所をメソッドとして抜き出しておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void parse(String str) {
    try{
        XmlPullParser xmlPullParser = Xml.newPullParser();
        xmlPullParser.setInput(new StringReader(str));
 
        int eventType;
        while ((eventType = xmlPullParser.next()) != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG && "title".equals(xmlPullParser.getName())) {
                Log.d("HttpSampleActivity", xmlPullParser.nextText());
            }
        }
    } catch (Exception e){
        Log.d("HttpSampleActivity", "Error:parse");
    }
}

インターネットに接続するのでAndroidManifest.xmlパーミッションの設定も忘れずに記述しておきます。

1
<uses-permission android:name="android.permission.INTERNET"/>

DefaultHttpClient

まずはDefaultHttpClientクラスを生成します。

1
HttpClient httpClient = new DefaultHttpClient();

次に発行したいHTTPリクエストを生成します。
今回は単純にRSSフィードのアドレスを指定するGetリクエストを準備します。

1
2
StringBuilder uri = new StringBuilder("https://techbooster.org/?feed=rss2");
HttpGet request = new HttpGet(uri.toString());

ここでStringBuilderクラスを使っていますが、このクラスはappendメソッドを使うことで文字列を追加していくことが可能です。WebAPIを使う場合などに便利なのでこちらを利用しますがもちろん下記のように記述しても今回は同じ動作をします。

1
HttpGet request = new HttpGet("https://techbooster.org/?feed=rss2");

または

1
2
HttpGet request = new HttpGet(uri);

そしてexecuteメソッドでGetリクエストを送信します。

1
2
3
4
5
6
HttpResponse httpResponse;
try {
    httpResponse = httpClient.execute(request);
} catch (Exception e) {
    Log.d("HttpSampleActivity", "Error Execute");
}

リクエストのステータスを確認して成功していたら(200なら)、レスポンスをByteArrayOutputStream
に書き出します。
そして準備しておいたパースのメソッドに引数で与えます。

1
2
3
4
5
6
7
8
9
10
11
12
13
int status = httpResponse.getStatusLine().getStatusCode();
 
if (HttpStatus.SC_OK == status) {
    try {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        httpResponse.getEntity().writeTo(outputStream);
        parse(outputStream.toString());
    } catch (Exception e) {
        Log.d("HttpSampleActivity", "Error");
    }
} else {
    Log.d("HttpSampleActivity", "Status" + status);
}

SC_OKというには定数で200に相当します。その他の定数を一部あげておきます。

ステータスコード

定数 コード
SC_OK 200
SC_MOVED_PERMANENTLY 301
SC_MOVED_TEMPORARILY 302
SC_NOT_FOUND 404
SC_INTERNAL_SERVER_ERROR 500
SC_SERVICE_UNAVAILABLE 503

6 Comments