org.apache.http.impl.clientパッケージのDefaultHttpClientクラスは、
HTTPクライアントを実装したクラスです。
インスタンス化するには、ThreadSafeClientConnManagerやHttpParamsのインスタンスを渡します。
具体的なサンプルコードは、以下のとおりです。
final HttpClient httpClient = new DefaultHttpClient(
new ThreadSafeClientConnManager(httpParams, schemeRegistryRegistry),
httpParams);
インスタンス作成後、HTTPリクエスト(GETやPUTなど)を発行するには、DefaultHttpClient.execute()を呼び出します。
具体的なサンプルコード(Twitterのpublic_timeline取得)は、以下のとおりです(一部、例外処理を省略して抜粋しています)。
final Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.path("/statuses/public_timeline.xml");
HttpEntity httpEntity = null;
final HttpResponse httpResponse = httpClient.execute(
new HttpHost("twitter.com", 80),
new HttpGet(uriBuilder.build().toString()));
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
httpEntity = httpResponse.getEntity();
final InputStream in = httpEntity.getContent();
final XmlPullParser parser = Xml.newPullParser();
try {
parser.setInput(new InputStreamReader(in));
// ・・・XMLを解析する処理・・・
} catch (XmlPullParserException e) {
}
}
順を追って説明すると、< p>
DefaultHttpClient.execute()の第1引数には、
org.apache.httpパッケージのHttpHostインスタンスを渡す必要があるため、
new HttpHost(ホスト名、ポート名);
でインスタンス化しています。
ここでのホスト名とは、たとえば、Twitterのタイムラインパスである
http://twitter.com/statuses/public_timeline.xml
の場合、twitter.comの部分です。
また、DefaultHttpClient.execute()の第2引数には、
org.apache.http.client.methodsパッケージのHttpGetインスタンスを渡します。
※同パッケージには、他にもHttpPut、HttpPost、HttpDeleteがあります
HttpGetに渡す引数は、uri文字列ですが、
これは、Uri.Builderクラスから作成できます。
ここでのuriとは、先の例で言うと、/statuses/public_timeline.xmlの部分を指します。
※さらに?key1=value1&key2=value2などを渡すには、appendしていけばよいです
リクエストの戻り値は、org.apache.httpパッケージのHttpResponseクラスであり、HttpResponse.getEntity()を呼び出し、
同(org.apache.http)パッケージのHttpEntityを得た後、
HttpEntity.getContent()を呼び出すと、InputStreamインスタンスが得られます。
あとは、XMLをパースするなどしていけばよいです。
