Чтение тела ответа в Java
Тело ответа не появляется само: при вызове send
нужно указать, как его принять. Обработчик
HttpResponse.BodyHandlers.ofString читает
поток байтов и собирает одну строку в кодировке
UTF-8.
Строку берут из метода body уже после
завершения запроса. Для проверки достаточно напечатать
результат:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/get"))
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
String text = response.body();
System.out.println(text);
}
}
Один и тот же обработчик подходит для любого чтения, где ожидается текст. Бинарные форматы здесь не разбирают - строка остается сырой, как пришла по сети:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder().build();
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.body().length());
}
}
Выведите тело ответа для
"https://httpbin.org/get?source=lab".
Отправьте чтение на "/headers" и
напечатайте длину строки тела ответа.