краткое
Под сегодня начали вводить основы Во-вторых, основное содержание запроса на прерывание, перенаправление.
Прерывание запроса
Как использовать Apache HttpClient 4 отменить запрос HTTP.
Это особенно полезно для загрузки больших файлов могут запросить или продолжительный, в противном случае запрос будет излишне потреблять пропускную способность и возможность соединения.
GET запрос о приостановлении
Чтобы прервать запрос, клиент может просто использовать:
request.abort();
复制代码
Это гарантирует, что клиенты не должны использовать весь запрос, чтобы освободить соединение:
@Test
public void test()
throws ClientProtocolException, IOException {
HttpClient instance = HttpClients.custom().build();
HttpGet request = new HttpGet(SAMPLE_URL);
HttpResponse response = instance.execute(request);
try {
System.out.println(response.getStatusLine());
request.abort();
} finally {
response.close();
}
}
复制代码
Перенаправление запрет
По умолчанию, спецификация HTTP, HttpClient будет автоматически следовать редиректам
Для некоторых случаев применения, они могут быть не в вопросе, но, конечно, не требуют прецеденты будут появляться. Теперь мы рассмотрим, как изменить поведение по умолчанию и остановить переадресацию.
Перед HttpClient 4,3
В старой версии HTTPClient (до 4.3), мы можем настроить клиент использовать перенаправление для выполнения операции, следующим образом:
@Test
public void test()
throws ClientProtocolException, IOException {
DefaultHttpClient instance = new DefaultHttpClient();
HttpParams params = new BasicHttpParams();
params.setParameter(ClientPNames.HANDLE_REDIRECTS, false);
// HttpClientParams.setRedirecting(params, false); // alternative
HttpGet httpGet = new HttpGet("http://localhost:8080");
httpGet.setParams(params);
CloseableHttpResponse response = instance.execute(httpGet);
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
复制代码
Обратите внимание, что переадресация может использоваться для настройки поведения резервного копирования API, а не с помощью фактического оригинального http.protocol.handle-перенаправляет набор параметров:
HttpClientParams.setRedirecting(params, false);
复制代码
Также обратите внимание, что при отключении последующего перенаправления, теперь мы можем проверить, действительно ли 301 Moved Permaned код состояния ответа Http - должно быть.
После HttpClient 4,3
HttpClient 4,3 вводит более четкий, более высокий уровень API для создания и настроек клиента:
@Test
public void test()
throws ClientProtocolException, IOException {
HttpClient instance = HttpClientBuilder.create().disableRedirectHandling().build();
HttpResponse response = instance.execute(new HttpGet("http://localhost:8080"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
复制代码
PS: Этот новый API использует перенаправление для настройки поведения всего клиента - не только один запрос.
Пользовательские Hearder
Требования, установленные Hearder (4.3 и выше)
HttpClient 4,3 вводит новый API для построения запросов - RequestBuilder. Для того, чтобы установить заголовок, мы будем использовать метод на SetHeader строитель:
HttpClient client = HttpClients.custom().build();
HttpUriRequest request = RequestBuilder.get()
.setUri(SAMPLE_URL)
.setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
.build();
client.execute(request);
复制代码
Требования, установленные Hearder (до 4.3)
В предыдущей версии 4.3 HttpClient, мы можем использовать простой SetHeader вызов установить пользовательские заголовки в запросе:
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(SAMPLE_URL);
request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
client.execute(request);
复制代码
Мы можем видеть, что мы направим Content-Type устанавливается в пользовательское значение --JSON по запросу.
На клиенте, чтобы установить заголовок по умолчанию
Мы также могут быть сконфигурированы как собственные заголовки клиента по умолчанию, вместо того, чтобы заголовок на каждый запрос:
Header header = new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json");
List<Header> headers = Lists.newArrayList(header);
HttpClient client = HttpClients.custom().setDefaultHeaders(headers).build();
HttpUriRequest request = RequestBuilder.get().setUri(SAMPLE_URL).build();
client.execute(request);
复制代码
В то же время (например, пользовательское приложение заголовки), который является полезным, когда заголовок всех запросов требует фазы.
резюме
В данной статье описывается HttpClient запроса прерывания, отключение трассировки HTTP перенаправления, знание пользовательских заголовков, я надеюсь на вашу помощь.