Добавить в корзинуПозвонить
Найти в Дзене
Уроки по программированию

Apache HttpClient 4

1. Обзор Эта кулинарная книга показывает, как использовать Apache HttpClient в различных примерах и вариантах использования. Основное внимание уделяется HttpClient 4.3.x и выше , поэтому некоторые примеры могут не работать со старыми версиями API. Формат поваренной книги ориентирован на примеры и практичен – никаких лишних деталей и объяснений не требуется. Если вы хотите копнуть глубже и узнать о других интересных вещах, которые можно делать с помощью HttpClient, — перейдите к основному руководству по HttpClient . 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.goo
Оглавление

1. Обзор

Эта кулинарная книга показывает, как использовать Apache HttpClient в различных примерах и вариантах использования.

Основное внимание уделяется HttpClient 4.3.x и выше , поэтому некоторые примеры могут не работать со старыми версиями API.

Формат поваренной книги ориентирован на примеры и практичен – никаких лишних деталей и объяснений не требуется.

Если вы хотите копнуть глубже и узнать о других интересных вещах, которые можно делать с помощью HttpClient, — перейдите к основному руководству по HttpClient .

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<NameValuePair> params = new ArrayList<NameValuePair>();
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()));

закрыть/освободить ресурсы

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. Вывод

Этот формат немного отличается от того, как я обычно структурирую свои статьи — я публикую некоторые из своих внутренних руководств по разработке на заданную тему — на Google Guava , Hamcrest и Mockito — а теперь и на HttpClient. Цель состоит в том, чтобы эта информация была легко доступна в Интернете и добавлялась к ней каждый раз, когда я сталкивался с новым полезным примером.

Реализацию всех этих примеров и фрагментов кода можно найти на GitHub .

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