Spec-Zone.ru › OpenJDK 24

Класс HttpClient

java.lang.Object
java.net.http.HttpClient
Все реализуемые интерфейсы:
AutoCloseable
public abstract class HttpClient extends Object implements AutoCloseable
Клиент HTTP.

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

Объект HttpClient предоставляет конфигурационную информацию и совместное использование ресурсов для всех запросов, отправленных через него. Экземпляр 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);
Примечание API:
Ресурсы, выделенные HttpClient, могут быть освобождены раньше с помощью закрытия клиента.
Примечание реализации:

Классы HttpResponse.BodyHandlers и HttpResponse.BodySubscribers обеспечивают некоторые потоковые или публикующие BodyHandler и BodySubscriber реализации, которые позволяют передавать данные тела обратно вызывающей стороне. Для того, чтобы ресурсы, связанные с этими потоками, были освобождены, и чтобы запрос HTTP считался завершенным, вызывающая сторона должна в конечном итоге получить тело потокового ответа и закрыть, отменить или прочитать возвращаемые потоки до исчерпания. Аналогично, реализация пользовательского HttpResponse.BodySubscriber должна либо запросить все данные до onComplete или onError, либо в конечном итоге отменить подписку.

Встроенная в JDK реализация HttpClient переопределяет close(), shutdown(), shutdownNow(), awaitTermination(Duration) и isTerminated(), чтобы обеспечить реализацию с наилучшими усилиями. Отсутствие закрытия, отмены или чтения streaming or publishing bodies до исчерпания может остановить передачу данных, оставив запрос открытым, и затормозить упорядоченное завершение. Метод shutdownNow(), если он вызван, попытается отменить любые такие незавершенные запросы, но может привести к внезапному прерыванию любой текущей операции.

Если не явным образом закрыт, встроенная в JDK реализация HttpClient освобождает свои ресурсы, когда экземпляр HttpClient больше не доступен по сильной ссылке, и все операции, начатые на этом экземпляре, в конечном итоге завершились. Это зависит как от сборщика мусора, который замечает, что экземпляр больше недоступен, так и от того, что все запросы, начатые на клиенте, в конечном итоге завершились. Отсутствие правильного закрытия потоковых или публикуемых тел может помешать связанным запросам завершиться и помешать сборщику мусора освободить ресурсы, выделенные связанным клиентом.

С:
11

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

Modifier and Type Class Description
static interface  HttpClient.Builder
Построитель HTTP-клиентов.
static enum  HttpClient.Redirect
Определяет политику автоматического перенаправления.
static enum  HttpClient.Version
Версия протокола HTTP.

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

HttpClient()
Modifier Constructor Description
protected
Создаёт HttpClient.

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

Modifier and Type Method Description
abstract Optional<Authenticator> authenticator()
Возвращает Optional, содержащий Authenticator, установленный для этого клиента.
boolean awaitTermination(Duration duration)
Ожидает завершения всех операций после запроса остановки, истечения duration или прерывания текущего потока, что произойдёт первым.
void close()
Запускает упорядоченную остановку, в которой запросы, ранее переданные в send или sendAsync, выполняются до завершения, но новые запросы не принимаются.
abstract Optional<Duration> connectTimeout()
Возвращает Optional, содержащий время ожидания подключения для этого клиента.
abstract Optional<CookieHandler> cookieHandler()
Возвращает Optional, содержащий обработчик файлов cookie (CookieHandler) этого клиента.
abstract Optional<Executor> executor()
Возвращает Optional, содержащий пул потоков (Executor) этого клиента.
abstract HttpClient.Redirect followRedirects()
Возвращает политику перенаправления для этого клиента.
boolean isTerminated()
Возвращает true, если все операции завершены после остановки.
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)
Отправляет заданный запрос асинхронно с помощью этого клиента с заданным обработчиком тела ответа и обработчиком обещания пуша.
void shutdown()
Запускает упорядоченную остановку, в которой запросы, ранее отправленные с send или sendAsync, выполняются до завершения, но новые запросы не принимаются.
void shutdownNow()
Данный метод пытается инициировать немедленную остановку.
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, содержащий обработчик файлов cookie этого клиента. Если обработчик файлов cookie не был задан в создателе этого клиента, то Optional пуст.
Возвращает:
Optional, содержащий обработчик файлов cookie этого клиента

connectTimeout

public abstract Optional<Duration> connectTimeout()
Возвращает Optional, содержащий время ожидания подключения для этого клиента. Если время ожидания подключения не было установлено в создателе клиента, то Optional пуст.
Возвращает:
Optional, содержащий время ожидания подключения этого клиента

followRedirects

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

proxy

public abstract Optional<ProxySelector> proxy()
Возвращает Optional, содержащий селектор прокси, предоставленный для этого клиента. Если селектор прокси не был задан в создателе этого клиента, то Optional пуст.

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

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

sslContext

public abstract SSLContext sslContext()
Возвращает контекст SSL этого клиента.

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

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

sslParameters

public abstract SSLParameters sslParameters()
Возвращает копию параметров SSL этого клиента.

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

Возвращает:
параметры SSL этого клиента

authenticator

public abstract Optional<Authenticator> authenticator()
Возвращает Optional, содержащий аутентификатор, установленный для этого клиента. Если аутентификатор не был задан в создателе клиента, то Optional пуст.
Возвращает:
Optional, содержащий аутентификатор этого клиента

version

public abstract HttpClient.Version version()
Возвращает предпочтительную версию протокола HTTP для этого клиента. Значение по умолчанию — HttpClient.Version.HTTP_2
Замечание по реализации:
Ограничения также могут влиять на выбор версии протокола. Например, если HTTP/2 запрашивается через прокси, и если реализация не поддерживает этот режим, то может использоваться HTTP/1.1
Возвращает:
запрошенная версия протокола HTTP

executor

public abstract Optional<Executor> executor()
Возвращает Optional, содержащий потоковую пул этого клиента. Если потоковая пул не была задана в создателе клиента, то Optional пуст.

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

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

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.

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 - если при отправке или приёме произошла ошибка ввода-вывода, или клиент был закрыт.

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

  • С HTTP/1.1, попытка отмены может привести к внезапному закрытию базового соединения.
  • С HTTP/2, попытка отмены может привести к сбросу потока.
Type Parameters:
T - тип тела ответа
Parameters:
request - запрос
responseBodyHandler - обработчик тела ответа
pushPromiseHandler - обработчик обещаний, может быть null
Returns:
CompletableFuture<HttpResponse<T>>
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 Opening Handshake может быть достигнут с помощью пользовательского 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

shutdown

public void shutdown()
Инициализирует упорядоченное завершение, в котором запросы, ранее отправленные с send или sendAsync, выполняются до завершения, но новые запросы не будут приняты. Выполнение запроса до завершения может включать в себя выполнение нескольких операций в фоновом режиме, включая ожидание доставки ответов, которые должны будут завершиться до того, как запрос будет считаться завершённым. Вызов не имеет дополнительного эффекта, если уже закрыт.

Этот метод не ждёт завершения ранее отправленных запросов. Используйте awaitTermination или close для этого.

Implementation Requirements:
Реализация по умолчанию ничего не делает. Подклассы должны переопределить этот метод для реализации соответствующего поведения.
Since:
21
See Also:
  • Замечание по реализации закрытия HttpClient

awaitTermination

public boolean awaitTermination(Duration duration) throws InterruptedException
Блокирует, пока все операции не будут завершены после запроса на завершение, или истечёт заданное duration, или текущий поток будет прерван, что произойдёт первым. Операции — это любые задачи, необходимые для выполнения запроса, ранее отправленного с send или sendAsync, до завершения.

Этот метод не ждёт, если время ожидания меньше или равно нулю. В этом случае метод просто проверяет, завершился ли поток.

Implementation Requirements:
Реализация по умолчанию проверяет аргументы на null, но в остальном ничего не делает и возвращает true. Подклассы должны переопределить этот метод для реализации соответствующего поведения.
Parameters:
duration - максимальное время ожидания
Returns:
true, если этот клиент завершился, и false, если истекло время ожидания до завершения
Throws:
InterruptedException - если прервано во время ожидания
Since:
21
See Also:
  • Замечание по реализации закрытия HttpClient

isTerminated

public boolean isTerminated()
Возвращает true, если все операции завершены после запроса на завершение. Операции — это любые задачи, необходимые для выполнения запроса, ранее отправленного с send или sendAsync, до завершения.

Обратите внимание, что isTerminated никогда не является true, если не был вызван ни shutdown, ни shutdownNow.

Implementation Requirements:
Реализация по умолчанию ничего не делает и возвращает false. Подклассы должны переопределить этот метод для реализации соответствующего поведения.
Returns:
true, если все задачи завершены после запроса на завершение
Since:
21
See Also:
  • Замечание по реализации закрытия HttpClient

shutdownNow

public void shutdownNow()
Этот метод пытается инициировать немедленное завершение. Реализация этого метода может попытаться прервать активно выполняющиеся операции. Операции — это любые задачи, необходимые для выполнения запроса, ранее отправленного с send или sendAsync, до завершения. Поведение активно выполняющихся операций при прерывании не определено. В частности, нет гарантии, что прерванные операции завершатся, или что код, ожидающий этих операций, когда-либо получит уведомление.
Implementation Requirements:
Реализация по умолчанию просто вызывает shutdown(). Подклассы должны переопределить этот метод для реализации соответствующего поведения.
Since:
21
See Also:
  • Замечание по реализации закрытия HttpClient

close

public void close()
Инициализирует упорядоченное завершение, в котором запросы, ранее отправленные в send или sendAsync, выполняются до завершения, но новые запросы не будут приняты. Выполнение запроса до завершения может включать в себя выполнение нескольких операций в фоновом режиме, включая ожидание доставки ответов. Этот метод ждёт, пока все операции не завершат выполнение и клиент не завершится.

Если прерван во время ожидания, этот метод может попытаться остановить все операции, вызвав shutdownNow(). Затем он продолжает ждать, пока все активно выполняющиеся операции не завершатся. Статус прерывания будет восстановлен перед возвратом этого метода.

Если уже завершён, вызов этого метода не имеет эффекта.

Specified by:
close в интерфейсе AutoCloseable
Implementation Requirements:
Реализация по умолчанию вызывает shutdown() и ждёт завершения задач с помощью awaitTermination.
Since:
21
See Also:
  • Замечание по реализации закрытия HttpClient

© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.net.http/java/net/http/HttpClient.html

Spec-Zone.ru

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