РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1094 of 1163 menu

Метод 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-ответ
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить