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出ちゃったりして残念な気持ちになるのでいずれはみんなキレイにしてあげたいですね。