Заголовки ответа в Kotlin
Заголовки ответа лежат отдельно от тела. Объект
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
fun main() {
val client = HttpClient.newBuilder().build()
val request = HttpRequest.newBuilder()
.uri(
URI.create(
"https://httpbin.org/response-headers?" +
"Content-Type=text/plain",
),
)
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
val type = response.headers()
.firstValue("content-type")
.orElse("")
println(type)
}
Метод firstValue дает первое значение для
имени или пустую строку через orElse.
Список всех значений для поля доступен через
allValues:
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
fun main() {
val client = HttpClient.newBuilder().build()
val request = HttpRequest.newBuilder()
.uri(
URI.create(
"https://httpbin.org/response-headers?" +
"Content-Type=text/plain",
),
)
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
println(response.headers().map().size)
}
Выведите значение поля "content-type"
для ответа
"https://httpbin.org/response-headers?Content-Type=text/html".
Отправьте чтение на "/get" и напечатайте
первое значение заголовка "date", если
он пришел, иначе строку "none".