Метод sendAsync
Метод sendAsync класса HttpClient отправляет
HTTP-запрос асинхронно, не блокируя текущий поток
выполнения. В первом параметре мы передаем объект
HttpRequest, который нужно отправить. Во втором
параметре мы передаем объект HttpResponse.BodyHandler,
который определяет, как преобразовать тело ответа.
Метод возвращает объект CompletableFuture, который
будет завершен, когда ответ придет.
Синтаксис
client.sendAsync(request, bodyHandler)
Пример
Давайте отправим GET-запрос асинхронно и выведем код ответа в консоль:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args) throws Exception
{
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.GET()
.build();
CompletableFuture<HttpResponse<String>> future =
client.sendAsync(request,
HttpResponse.BodyHandlers.ofString());
HttpResponse<String> response = future.get();
System.out.println(response.statusCode());
}
}
Результат выполнения кода:
200
Пример
Давайте отправим POST-запрос с телом асинхронно и выведем тело ответа:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args) throws Exception
{
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.POST(HttpRequest.BodyPublishers.ofString("abcde"))
.build();
CompletableFuture<HttpResponse<String>> future =
client.sendAsync(request,
HttpResponse.BodyHandlers.ofString());
HttpResponse<String> response = future.get();
System.out.println(response.body());
}
}
Результат выполнения кода:
"..."
Пример
Давайте обработаем ответ асинхронно через метод
thenAccept без блокировки основного потока:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
public class Main
{
public static void main(String[] args) throws Exception
{
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.GET()
.build();
CompletableFuture<HttpResponse<String>> future =
client.sendAsync(request,
HttpResponse.BodyHandlers.ofString());
future.thenAccept(response -> {
System.out.println(response.statusCode());
});
Thread.sleep(2000);
}
}
Результат выполнения кода:
200
Смотрите также
-
метод
send,
который отправляет запрос синхронно -
класс
HttpClient,
который выполняет HTTP-запросы -
класс
HttpRequest,
который представляет HTTP-запрос -
класс
HttpResponse,
который представляет HTTP-ответ