LoginSignup
18
14

More than 5 years have passed since last update.

httpclientのインターフェースが4.3から大きく変わったみたいですよ

Last updated at Posted at 2014-12-25

API呼び出しなどでおなじみのhttpclientさん。
最近コイツを使う機会があったのだが、
どうやら4.3系からインターフェースが大きく変わったらしい。
なんかカッコよく書けるって噂だったので調べて実装してみたの巻。

準備

ビルドツールとしてmavenを使っているので以下のようにpom.xmlに書いてやる。

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.3.6</version>
</dependency>

今回はバージョン4.3.6を使用。
依存関係で httpcore4.3.3, commons-logging1.1.3, commons-codec1.6 がついてきます。いらっしゃい。

早速実装してみる

  • 接続設定を書いてみる
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
            connectionManager.setMaxTotal((int) maxTotal);
            connectionManager.setDefaultMaxPerRoute((int) defaultMaxPerRoute);
  • リクエスト設定を書いてみる
RequestConfig requestConfig = RequestConfig.custom()
        .setConnectTimeout((int) connectionTimeout)
        .setSocketTimeout((int) socketTimeout)
        .build();
  • ヘッダーを準備する
List<Header> headers = new ArrayList<Header>();
headers.add(new BasicHeader("X-API-Token", "hogehogefugafuga"));
  • リトライ設定をしてみる
HttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(
        (int) retryCount(),
        (boolean) requestSentRetryEnabled());
  • さぁ、クライアントを生成しよう
HttpClient httpClient = HttpClientBuilder.create()
        .setConnectionManager(connectionManager)
        .setDefaultRequestConfig(requestConfig)
        .setDefaultHeaders(headers)
        .setRetryHandler(retryHandler)
        .build();
  • リクエストを実行だー
URI uri = new URIBuilder()
        .setScheme(scheme)
        .setHost(domain)
        .setPath(path)
        .addParameter("hoge", "fuga")
        .build();
httpClient .execute(new HttpGet(uri));

いろいろメモ

使ったら閉じよう!
  • HttpClientUtils.closeQuietly(httpClient) でクライアントを閉じてあげませう。 内部でIOExceptionをキャッチしてくれているのでnull判定を自分で書く必要がなくなったね!
4.2系以下のバージョンとの競合しないの?
  • mavenの場合依存階層の高いやつがインストールされるみたいなんだけど、4.3系でも以前のソースは残ってるので(当たり前)4.2系以下のコードも今までどおり動く。 但し、大体のソースが@DeprecatedだったりするのでIDEでwarning出ちゃったりして残念な気持ちになるのでいずれはみんなキレイにしてあげたいですね。
18
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
14