HttpClient 4クックブック

HttpClient 4クックブック

1. 概要

このクックブックには、さまざまな例とユースケースでhow to use the Apache HttpClient 4が示されています。

焦点はHttpClient 4.3.x and aboveにあるため、一部の例は古いバージョンのAPIでは機能しない可能性があります。

クックブックの形式は、例に焦点を当てた実用的であり、余分な詳細や説明は不要です。

深く掘り下げて、HttpClientでできる他のクールなことを学びたい場合は、the main HttpClient tutorialに進んでください。

2. クックブック

httpクライアントを作成する

CloseableHttpClient client = HttpClientBuilder.create().build();

基本的なGETリクエストを送信します

instance.execute(new HttpGet("http://www.google.com"));

HTTP応答のステータスコードを取得します

CloseableHttpResponse response = instance.execute(new HttpGet("http://www.google.com"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));

応答のメディアタイプを取得します

CloseableHttpResponse response = instance.execute(new HttpGet("http://www.google.com"));
String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType();
assertThat(contentMimeType, equalTo(ContentType.TEXT_HTML.getMimeType()));

応答の本文を取得します

CloseableHttpResponse response = instance.execute(new HttpGet("http://www.google.com"));
String bodyAsString = EntityUtils.toString(response.getEntity());
assertThat(bodyAsString, notNullValue());

リクエストのタイムアウトを設定する

@Test(expected = SocketTimeoutException.class)
public void givenLowTimeout_whenExecutingRequestWithTimeout_thenException()
    throws ClientProtocolException, IOException {
    RequestConfig requestConfig = RequestConfig.custom()
      .setConnectionRequestTimeout(1000).setConnectTimeout(1000).setSocketTimeout(1000).build();
    HttpGet request = new HttpGet(SAMPLE_URL);
    request.setConfig(requestConfig);
    instance.execute(request);
}

クライアント全体でタイムアウトを構成する

RequestConfig requestConfig = RequestConfig.custom().
    setConnectionRequestTimeout(1000).setConnectTimeout(1000).setSocketTimeout(1000).build();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig);

POSTリクエストを送信する

instance.execute(new HttpPost(SAMPLE_URL));

リクエストにパラメータを追加する

List params = new ArrayList();
params.add(new BasicNameValuePair("key1", "value1"));
params.add(new BasicNameValuePair("key2", "value2"));
request.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8));

HTTPリクエストのリダイレクトの処理方法を構成します

CloseableHttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
CloseableHttpResponse response = instance.execute(new HttpGet("http://t.co/I5YYd9tddw"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));

リクエストのヘッダーを構成する

HttpGet request = new HttpGet(SAMPLE_URL);
request.addHeader(HttpHeaders.ACCEPT, "application/xml");
response = instance.execute(request);

応答からヘッダーを取得します

CloseableHttpResponse response = instance.execute(new HttpGet(SAMPLE_URL));
Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
assertThat(headers, not(emptyArray()));

close/release resources

response = instance.execute(new HttpGet(SAMPLE_URL));
try {
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        InputStream instream = entity.getContent();
        instream.close();
    }
} finally {
    response.close();
}

3. HttpClientに深く入ります

HttpClientライブラリは、正しく使用すれば非常に強力なツールです–exploring what the client can doを開始したい場合–いくつかのチュートリアルをチェックしてください:

the entire seriesを探索して、dig a lot deeper into the HttpClientを実行することもできます。

4. 結論

この形式は、通常の記事の構造(特定のトピックのI’m publishing some of my internal development cookbooks)、Google GuavaHamcrestMockito)、そして現在はHttpClientとは少し異なります。 目標は、この情報をオンラインですぐに利用できるようにし、新しい有用な例を実行するたびに追加することです。

これらすべての例とコードスニペットcan be found in over on GitHubの実装。

これはMavenベースのプロジェクトであるため、インポートしてそのまま実行するのは簡単です。