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, поэтому его легко импортировать и запускать как есть.