Класс HttpClient
- java.lang.Object
-
- java.net.http.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() | Возвращает |
abstract Optional<Duration> | connectTimeout() | Возвращает |
abstract Optional<CookieHandler> | cookieHandler() | Возвращает |
abstract Optional<Executor> | executor() | Возвращает |
abstract HttpClient.Redirect | followRedirects() | Возвращает политику следования редиректам для этого клиента. |
static HttpClient.Builder | newBuilder() | Создает новый |
static HttpClient | newHttpClient() | Возвращает новый |
WebSocket.Builder | newWebSocketBuilder() | Создает новый |
abstract Optional<ProxySelector> | proxy() | Возвращает |
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() | Возвращает |
abstract 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