Spec-Zone.ru › OpenJDK 17

Класс HttpClient

java.lang.Object
java.net.http.HttpClient
public abstract class HttpClient extends Object
Клиент HTTP.

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

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

Для каждого HttpRequest, отправленного через клиент, необходимо указать BodyHandler. 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", где host и port указывают адрес прокси.

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

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static interface  HttpClient.Builder
Билдер клиентов HTTP.
static enum  HttpClient.Redirect
Определяет политику автоматического перенаправления.
static enum  HttpClient.Version
Версия протокола HTTP.

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

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

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

Модификатор и тип Метод Описание
abstract Optional<Authenticator> authenticator()
Возвращает Optional, содержащий Authenticator, установленный для этого клиента.
abstract Optional<Duration> connectTimeout()
Возвращает Optional, содержащий время ожидания соединения для этого клиента.
abstract Optional<CookieHandler> cookieHandler()
Возвращает Optional, содержащий CookieHandler этого клиента.
abstract Optional<Executor> executor()
Возвращает Optional, содержащий Executor этого клиента.
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
Выбрасывает:
UncheckedIOException - если при необходимости не могут быть выделены необходимые базовые ресурсы ввода-вывода для создания нового HttpClient.

newBuilder

public static HttpClient.Builder newBuilder()
Создаёт новый HttpClient билдер.

Билдеры, возвращаемые этим методом, создают экземпляры стандартной реализации 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 пуст.

Несмотря на то, что этот метод может возвращать пустой 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 пуст.

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

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

send

public abstract <T> HttpResponse<T> send(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler) throws IOException, InterruptedException
Отправляет заданный запрос с использованием этого клиента, блокируя, если необходимо, для получения ответа. Возвращаемый HttpResponse<T> содержит статус ответа, заголовки и тело (обработанное заданным обработчиком тела ответа).

Если операция прервана, стандартная реализация HttpClient пытается отменить HTTP-обмен и выбрасывается InterruptedException. Не гарантируется, когда запрос на отмену будет учтён. В частности, запрос может всё ещё быть отправлен на сервер, так как его обработка может уже начаться асинхронно в другом потоке, и освобождение базовых ресурсов может произойти асинхронно.

  • С HTTP/1.1, попытка отмены может привести к прерыванию соединения.
  • С HTTP/2, попытка отмены может привести к сбросу потока или, в некоторых случаях, к прерыванию соединения, если, например, поток в данный момент пытается записать в базовый сокет.
Параметры типа:
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)
Отправляет данный запрос асинхронно с помощью этого клиента с заданным обработчиком тела ответа и обработчиком запросов на передачу данных.

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

Полученные, если таковые имеются, запросы на передачу данных обрабатываются заданным pushPromiseHandler. null значение pushPromiseHandler отклоняет все запросы на передачу данных.

Возвращаемое завершаемое будущее завершается с ошибкой:

  • IOException - если при отправке или приёме возникает ошибка ввода-вывода
  • SecurityException - если установлен менеджер безопасности и он запрещает access для URL в данном запросе, или для прокси, если он настроен. Дополнительную информацию см. в разделе проверки безопасности.

Реализация по умолчанию HttpClient возвращает CompletableFuture объекты, которые являются отменяемыми. CompletableFuture объекты производные от отменяемых будущих сами являются отменяемыми. Вызов cancel(true) на отменяемом будущем, которое не завершено, пытается отменить HTTP обмен, чтобы как можно скорее освободить базовые ресурсы. Никаких гарантий относительно точности момента, когда запрос на отмену будет учтён, не даётся. В частности, запрос может всё ещё быть отправлен на сервер, так как его обработка может уже начаться асинхронно в другом потоке, а освобождение базовых ресурсов может произойти асинхронно.

  • При использовании HTTP/1.1 попытка отмены может привести к внезапному закрытию базового соединения.
  • При использовании HTTP/2 попытка отмены может привести к сбросу потока.
Type Parameters:
T - тип тела ответа
Parameters:
request - запрос
responseBodyHandler - обработчик тела ответа
pushPromiseHandler - обработчик запросов на передачу данных, может быть null
Returns:
завершаемое будущее
Throws:
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); 
Implementation Requirements:
По умолчанию этот метод выбрасывает UnsupportedOperationException. Клиенты, полученные через newHttpClient() или newBuilder(), возвращают WebSocket билдер.
Implementation Note:
Как билдер, так и WebSocket созданные с ним, работают в неблокирующем режиме. То есть их методы не блокируются до возврата CompletableFuture. Асинхронные задачи выполняются в исполнителе этого HttpClient.

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

Returns:
WebSocket.Builder
Throws:
UnsupportedOperationException - если этот HttpClient не поддерживает WebSocket

© 1993, 2021, 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/17/docs/api/java.net.http/java/net/http/HttpClient.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API