HttpClient 3 から 4 へ

日本語だと HttpClient 4 を使っている人をあまり見ないような気もするけど(気のせい?)、3 から 4 にするとどう違うかを超簡単に示すと、

// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod(url);
try {
// Execute the method.
int statusCode = client.executeMethod(method);
// Read the response body.
InputStream is = method.getResponseBodyAsStream();
... 何かする ...
} catch (Exception e) {
... 何かする ...
} finally {
// Release the connection.
method.releaseConnection();
}

という感じで今まで書いていたと思うけど、

// Create an instance of HttpClient.
HttpClient httpclient = new DefaultHttpClient();
// Create a method instance.
HttpGet httpget = new HttpGet(url);
HttpEntity entity = null;
try {
// Execute the method.
HttpResponse response = httpclient.execute(httpget);
int statusCode = response.getStatusLine().getStatusCode();
entity = response.getEntity();
// Read the response body.
InputStream is = entity.getContent();
... 何かする ...
} catch (Exception e) {
... 何かする ...
} finally {
// Release the connection.
if (entity != null) {
entity.consumeContent();
}
}
httpclient.getConnectionManager().shutdown();

という感じ。

まず、DefaultHttpClient を生成する。今までのHttpClientと思って良いだろう。メソッドクラス系の GetMethod などは、HttpGet などに置き換わっている。まぁ、これも特に問題ないだろう。メソッドの実行については execute メソッドを利用する。引数は HttpGet などのメソッドだ(本気で HttpClient 4 を使う場合はリクエストヘッダーなどのパラメータなども渡したくなるからHttpContextも渡すメソッドを使うことになるだろう)。executeメソッドを実行すると HttpResponse が返ってくる。なので、レスポンスはここから取得する。ステータス系は getStatusLine メソッドで取得できる。レスポンスの本文は HttpEntity から取得する。getContent メソッドでストリームを取得できる。取得したら、今までのreleaseConnectionメソッドを呼んでいたところでHttpEntity の consumeContent メソッドを呼んでおく。httpclientが不要になったら、connectionManagerのshutdownをしておく。

コメントを残す

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