HttpClient 4 Cookbook

HttpClient 4 Cookbook

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 - ознакомьтесь с некоторыми руководствами:

Вы также можетеdig a lot deeper into the HttpClient, исследуяthe entire series.

4. Заключение

Этот формат немного отличается от того, как я обычно структурирую свои статьи -I’m publishing some of my internal development cookbooks по заданной теме - наGoogle Guava,Hamcrest иMockito - а теперь и HttpClient. Цель состоит в том, чтобы эта информация была легко доступна онлайн и добавлялась к ней всякий раз, когда я сталкиваюсь с новым полезным примером.

Реализация всех этих примеров и фрагментов кодаcan be found in over on GitHub.

Это проект, основанный на Maven, поэтому его легко импортировать и запускать как есть.