Класс HttpClient

public abstract class HttpClient
extends Object

Клиент HTTP.

Объект типа HttpClient может быть использован для отправки запросов и получения их ответов. Объект HttpClient создается с помощью builder. Построитель может быть использован для конфигурации состояния клиента, например: предпочтительной версии протокола (HTTP/1.1 или HTTP/2), следования редиректам, прокси, аутентификатора и т. д. После создания объект HttpClient является неизменяемым и может быть использован для отправки нескольких запросов.

Объект HttpClient предоставляет информацию о конфигурации и совместное использование ресурсов для всех запросов, отправленных через него.

Обработчик тела ответа BodyHandler должен быть предоставлен для каждого отправляемого HttpRequest. BodyHandler определяет, как обрабатывать тело ответа, если оно есть. После получения HttpResponse, доступны заголовки, код ответа и тело (как правило). Прочитаны ли байты тела ответа или нет зависит от типа T, тела ответа.

Запросы могут быть отправлены синхронно или асинхронно:

  • send(HttpRequest, BodyHandler) блокируется, пока запрос не будет отправлен, а ответ не будет получен.
  • sendAsync(HttpRequest, BodyHandler) отправляет запрос и получает ответ асинхронно. Метод sendAsync возвращает сразу же с CompletableFuture<HttpResponse>. CompletableFuture завершается, когда ответ становится доступным. Возвращаемое значение CompletableFuture может быть комбинировано различными способами для объявления зависимостей между несколькими асинхронными задачами.

Синхронный пример

HttpClient client = HttpClient.newBuilder()
        .version(Version.HTTP_1_1)
        .followRedirects(Redirect.NORMAL)
        .connectTimeout(Duration.ofSeconds(20))
        .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
        .authenticator(Authenticator.getDefault())
        .build();
   HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
   System.out.println(response.statusCode());
   System.out.println(response.body());

Асинхронный пример

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://foo.com/"))
        .timeout(Duration.ofMinutes(2))
        .header("Content-Type", "application/json")
        .POST(BodyPublishers.ofFile(Paths.get("file.json")))
        .build();
   client.sendAsync(request, BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println);

Проверка безопасности

Если менеджер безопасности присутствует, проверки безопасности выполняются методами отправки HTTP-клиента. Для доступа к целевому серверу и прокси-серверу (если он настроен) требуется соответствующее URLPermission. Форма URLPermission необходимая для доступа к прокси, имеет параметр method со значением "CONNECT" (для всех типов проксирования) и строку URL вида "socket://host:port", где хост и порт указывают адрес прокси-сервера.

Примечание реализации:
Если для HttpClient не установлен явный executor, а менеджер безопасности установлен, то по умолчанию асинхронные и зависимые задачи будут выполняться в контексте без предоставленных разрешений. Пользовательские издатели тела запроса, обработчики тела ответа, подписчики на тело ответа и слушатели WebSocket, если выполняют операции, требующие привилегий, должны делать это в подходящем привилегированном контексте.
С:
11

Вложенные классы

Модификатор и тип Класс Описание
static interface  HttpClient.Builder

Построитель HTTP-клиентов.

static class  HttpClient.Redirect

Определяет политику автоматического перенаправления.

static class  HttpClient.Version

Версия HTTP-протокола.

Краткое описание конструкторов

Модификатор Конструктор Описание
protected HttpClient()

Создает HttpClient.

Краткое описание методов

Модификатор и тип Метод Описание
abstract Optional<Authenticator> authenticator()

Возвращает Optional содержащий Authenticator, установленный для этого клиента.

abstract Optional<Duration> connectTimeout()

Возвращает Optional содержащий время ожидания подключения для этого клиента.

abstract Optional<CookieHandler> cookieHandler()

Возвращает Optional содержащий обработчик файлов cookie клиента.

abstract Optional<Executor> executor()

Возвращает Optional содержащий выполнение задач клиента.

abstract HttpClient.Redirect followRedirects()

Возвращает политику следования редиректам для этого клиента.

static HttpClient.Builder newBuilder()

Создает новый HttpClient построитель.

static HttpClient newHttpClient()

Возвращает новый HttpClient с настройками по умолчанию.

WebSocket.Builder newWebSocketBuilder()

Создает новый WebSocket построитель (необязательная операция).

abstract Optional<ProxySelector> proxy()

Возвращает Optional содержащий ProxySelector, предоставленный для этого клиента.

abstract <T> HttpResponse<T> send​(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)

Отправляет данный запрос с помощью этого клиента, блокируя, если необходимо, чтобы получить ответ.

abstract <T> CompletableFuture<HttpResponse<T>> sendAsync​(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)

Отправляет данный запрос асинхронно с помощью этого клиента с указанным обработчиком тела ответа.

abstract <T> CompletableFuture<HttpResponse<T>> sendAsync​(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, HttpResponse.PushPromiseHandler<T> pushPromiseHandler)

Отправляет данный запрос асинхронно с помощью этого клиента с указанным обработчиком тела ответа и обработчиком push-обещания.

abstract SSLContext sslContext()

Возвращает SSLContext этого клиента.

abstract SSLParameters sslParameters()

Возвращает копию SSLParameters этого клиента.

abstract HttpClient.Version version()

Возвращает предпочтительную версию HTTP-протокола для этого клиента.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Конструкторы

HttpClient

protected HttpClient()

Создаёт HttpClient.

Методы

newHttpClient

public static HttpClient newHttpClient()

Возвращает новый HttpClient с настройками по умолчанию.

Эквивалентно newBuilder().build().

Настройки по умолчанию включают: метод запроса "GET", предпочтительный протокол HTTP/2, политику перенаправлений НИКОГДА, стандартный селектор прокси и стандартный контекст SSL.

Примечание реализации:
Значения по умолчанию для всей системы извлекаются в момент создания экземпляра HttpClient. Изменение значений по умолчанию для всей системы после создания экземпляра HttpClient, например, вызовом ProxySelector.setDefault(ProxySelector) или SSLContext.setDefault(SSLContext), не оказывает никакого влияния на уже созданные экземпляры.
Возвращает:
новый HttpClient

newBuilder

public static HttpClient.Builder newBuilder()

Создаёт новый HttpClient билдер.

Возвращает:
HttpClient.Builder

cookieHandler

public abstract Optional<CookieHandler> cookieHandler()

Возвращает Optional, содержащий CookieHandler этого клиента. Если в билдере этого клиента не был задан CookieHandler, то Optional пуст.

Возвращает:
Optional содержащий CookieHandler этого клиента

connectTimeout

public abstract Optional<Duration> connectTimeout()

Возвращает Optional, содержащий длительность таймаута соединения для этого клиента. Если длительность таймаута соединения таймаута соединения не была задана в билдере клиента, то Optional пуст.

Возвращает:
Optional содержащий длительность таймаута соединения этого клиента

followRedirects

public abstract HttpClient.Redirect followRedirects()

Возвращает политику следования перенаправлениям для этого клиента. Значение по умолчанию для клиентов, созданных билдерами, не задающими политику перенаправлений, — NEVER.

Возвращает:
настройки следования перенаправлениям этого клиента

proxy

public abstract Optional<ProxySelector> proxy()

Возвращает Optional, содержащий ProxySelector, предоставленный этому клиенту. Если в билдере этого клиента не был задан селектор прокси, то Optional пуст.

Несмотря на то, что этот метод может возвращать пустой опциональный параметр, HttpClient может иметь неэкспонированный стандартный селектор прокси, который используется для отправки HTTP-запросов.

Возвращает:
Optional содержащий селектор прокси, предоставленный этому клиенту.

sslContext

public abstract SSLContext sslContext()

Возвращает SSLContext этого клиента.

Если в билдере этого клиента не был задан SSLContext, то возвращается стандартный контекст.

Возвращает:
SSLContext этого клиента

sslParameters

public abstract SSLParameters sslParameters()

Возвращает копию SSLParameters этого клиента.

Если в билдере клиента не были заданы SSLParameters, то возвращается набор параметров по умолчанию, используемый клиентом.

Возвращает:
SSLParameters

authenticator

public abstract Optional<Authenticator> authenticator()

Возвращает Optional, содержащий Authenticator, установленный на этом клиенте. Если в билдере клиента не был задан Authenticator, то Optional пуст.

Возвращает:
Optional содержащий Authenticator этого клиента

version

public abstract HttpClient.Version version()

Возвращает предпочтительную версию протокола HTTP для этого клиента. Значение по умолчанию — HttpClient.Version.HTTP_2

Примечание реализации:
Ограничения также могут повлиять на выбор версии протокола. Например, если HTTP/2 запрошен через прокси, и если реализация не поддерживает этот режим, то может быть использован HTTP/1.1
Возвращает:
запрошенную версию протокола HTTP

executor

public abstract Optional<Executor> executor()

Возвращает Optional, содержащий Executor этого клиента. Если в билдере клиента не был задан Executor, то Optional пуст.

Несмотря на то, что этот метод может возвращать пустой опциональный параметр, HttpClient может всё же иметь неэкспонированный стандартный исполняемый модуль, который используется для выполнения асинхронных и зависимых задач.

Возвращает:
Optional содержащий Executor этого клиента

send

public abstract <T> HttpResponse<T> send(HttpRequest request,
                                         HttpResponse.BodyHandler<T> responseBodyHandler)
                                  throws IOException,
                                         InterruptedException

Отправляет заданный запрос с помощью этого клиента, блокируя, если необходимо, для получения ответа. Возвращаемый HttpResponse<T> содержит код ответа, заголовки и тело (обработанное заданным обработчиком тела ответа).

Параметры типа:
T - тип тела ответа
Параметры:
request - запрос
responseBodyHandler - обработчик тела ответа
Возвращает:
ответ
Исключения:
IOException - если при отправке или приёме произошла ошибка ввода-вывода
InterruptedException - если операция прервана
IllegalArgumentException - если аргумент request не является запросом, который можно было бы правильно создать, как указано в HttpRequest.Builder.
SecurityException - если установлен менеджер безопасности и он запрещает access для URL в заданном запросе или прокси, если он настроен. Дополнительная информация приведена в разделе проверка безопасности.

sendAsync

public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request,
                                                                 HttpResponse.BodyHandler<T> responseBodyHandler)

Отправляет заданный запрос асинхронно с помощью этого клиента с заданным обработчиком тела ответа.

Эквивалентно: sendAsync(request, responseBodyHandler, null).

Параметры типа:
T - тип тела ответа
Параметры:
request - запрос
responseBodyHandler - обработчик тела ответа
Возвращает:
CompletableFuture<HttpResponse<T>>
Исключения:
IllegalArgumentException - если аргумент request не является запросом, который можно было бы правильно создать, как указано в HttpRequest.Builder.

sendAsync

public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request,
                                                                 HttpResponse.BodyHandler<T> responseBodyHandler,
                                                                 HttpResponse.PushPromiseHandler<T> pushPromiseHandler)

Отправляет заданный запрос асинхронно с помощью этого клиента с заданным обработчиком тела ответа и обработчиком push-обещания.

Возвращаемое будущее, если завершено успешно, завершается с HttpResponse<T> содержащим код ответа, заголовки и тело (обработанное заданным обработчиком тела ответа).

Push-обещания, если они есть, обрабатываются заданным pushPromiseHandler. null пустое pushPromiseHandler отклоняет любые push-обещания.

Возвращаемое будущее завершается исключением:

  • IOException - если при отправке или приёме произошла ошибка ввода-вывода
  • SecurityException - если установлен менеджер безопасности и он запрещает access для URL в заданном запросе или прокси. Дополнительная информация приведена в разделе проверка безопасности.
Параметры типа:
T - тип тела ответа
Параметры:
request - запрос
responseBodyHandler - обработчик тела ответа
pushPromiseHandler - обработчик push-обещания, может быть null
Возвращает:
CompletableFuture<HttpResponse<T>>
Исключения:
IllegalArgumentException - если аргумент request не является запросом, который можно было бы правильно создать, как указано в HttpRequest.Builder.

newWebSocketBuilder

public WebSocket.Builder newWebSocketBuilder()

Создаёт новый WebSocket билдер (необязательная операция).

Пример

HttpClient client = HttpClient.newHttpClient();
   CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
           .buildAsync(URI.create("ws://websocket.example.com"), listener);

Более точный контроль над начальным рукопожатием WebSocket может быть достигнут с помощью настраиваемого HttpClient.

Пример

InetSocketAddress addr = new InetSocketAddress("proxy.example.com", 80);
   HttpClient client = HttpClient.newBuilder()
           .proxy(ProxySelector.of(addr))
           .build();
   CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
           .buildAsync(URI.create("ws://websocket.example.com"), listener);
Требования к реализации:
Стандартная реализация этого метода выбрасывает UnsupportedOperationException. Клиенты, полученные с помощью newHttpClient() или newBuilder(), возвращают билдер WebSocket.
Примечание реализации:
И билдер, и WebSocket созданные с его помощью, работают в режиме без ожидания. То есть их методы не блокируются до возврата CompletableFuture. Асинхронные задачи выполняются в исполняемом модуле этого HttpClient.

Когда будущее CompletionStage возвращённое из Listener.onClose завершается, WebSocket отправляет сообщение Close с тем же кодом, что и полученное сообщение, и пустым описанием причины.

Возвращает:
WebSocket.Builder
Исключения:
UnsupportedOperationException - если этот HttpClient не предоставляет поддержку WebSocket

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html

Spec-Zone .ru
спецификации, руководства, описания, API