日本語だと 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をしておく。