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をしておく。

HttpClient 4 へ移行してみた

HttpClient 4 のチュートリアルもざっくり眺め、S2Robotのコードを書き換えてみた。 S2Robot の CommonsHttpClient を捨てて置き換えかなっと始めは思っていたのだけど、別に CommonsHttpClient はまま残せるじゃん、みたいな感じでわかったのでそのまま残し、HcHttpClient なるものを追加しておいた。CommonsHttpClient のは dicon 上は有効にしていないので、今まで通りに使いたければ、s2robot_client.dicon を編集すれば良い(と思う)。まぁ、今後的には CommonsHttpClient の方はメンテしていくかはわからないけど。そんな感じで、HttpClient 3 を卒業して、HttpClient 4 使いになることができました。これで新しい機能の恩恵を受けることができるようになった…。

HttpClient 4 へ移行

今まで HttpClient 3.1 にしがみついていた私だけど、NTLM 問題とかあったりして、そろそろ HttpClient 4 に行かねばならんのかな、と思う今日この頃。というわけで、S2Robot 0.5 では HttpClient 4 系に移行します。S2Robot の基本的なインターフェースは変わらないと思うけど、S2Robot の BasicAuthentication というような認証系のクラスはインターフェースに変更したりしようと思います。そんな感じですが、問題がありましたらお知らせくださいー。