Класс HttpClient
Класс HttpClient является частью пакета java.net.http и предоставляет функциональность для отправки HTTP-запросов и получения ответов. Он поддерживает как синхронные, так и асинхронные запросы, а также HTTP/1.1 и HTTP/2. В отличие от старого класса HttpURLConnection, HttpClient имеет более удобный и современный API, основанный на паттерне Builder. Экземпляр класса создается с помощью статического метода newHttpClient или через строитель newBuilder, который позволяет настроить такие параметры, как таймауты, следование перенаправлениям, исполнитель и обработчик cookie. Для отправки запроса используется метод send (синхронно) или sendAsync (асинхронно), в который передается объект HttpRequest и обработчик тела ответа HttpResponse.BodyHandler.
Синтаксис
HttpClient client = HttpClient.newHttpClient();
HttpClient client = HttpClient.newBuilder().build();
Пример
Давайте создадим простой HTTP-клиент и отправим GET-запрос на тестовый сервер:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main
{
public static void main(String[] args) throws Exception
{
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/get"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Результат выполнения кода (первые строки):
200
{
"args": {},
"headers": {
"Host": "httpbin.org",
"User-Agent": "Java-http-client/17.0.2"
},
"url": "https://httpbin.org/get"
}
Пример
Давайте настроим клиент с помощью newBuilder, указав таймаут соединения и следование перенаправлениям, а затем отправим POST-запрос с телом:
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;
public class Main
{
public static void main(String[] args) throws Exception
{
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/post"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"key\":\"value\"}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Результат выполнения кода (первые строки):
200
{
"args": {},
"data": "{\"key\":\"value\"}",
"headers": {
"Content-Type": "application/json",
"Host": "httpbin.org"
},
"json": {
"key": "value"
},
"url": "https://httpbin.org/post"
}
Смотрите также
-
метод
newHttpClient,
который создает новый экземпляр HttpClient -
метод
newBuilder,
который возвращает строитель для настройки клиента -
метод
send,
который отправляет синхронный HTTP-запрос -
метод
sendAsync,
который отправляет асинхронный HTTP-запрос