Заголовки ответа в Java
Заголовки ответа лежат отдельно от тела. Объект
HttpHeaders возвращает метод
response.headers. Имена в HTTP не
чувствительны к регистру, но в API их ищут в
нижнем регистре.
Эндпоинт "/response-headers" позволяет
задать заголовки, которые сервер вернет клиенту.
Тип содержимого удобно проверить так:
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/response-headers?" +
"Content-Type=text/plain",
),
)
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
String type = response.headers()
.firstValue("content-type")
.orElse("");
System.out.println(type);
}
}
Метод firstValue дает первое значение для
имени или пустую строку через orElse.
Список всех значений для поля доступен через
allValues:
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/response-headers?" +
"Content-Type=text/plain",
),
)
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.println(response.headers().map().size());
}
}
Выведите значение поля "content-type"
для ответа
"https://httpbin.org/response-headers?Content-Type=text/html".
Отправьте чтение на "/get" и напечатайте
первое значение заголовка "date", если
он пришел, иначе строку "none".