HttpClient серии - Основы (б)

краткое

Под сегодня начали вводить основы Во-вторых, основное содержание запроса на прерывание, перенаправление.

Прерывание запроса

Как использовать 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 перенаправления, знание пользовательских заголовков, я надеюсь на вашу помощь.

рекомендация

отjuejin.im/post/5d0c8c03e51d4556dc29364b