Чтение тела ответа в Kotlin
Тело ответа не появляется само: при вызове 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
fun main() {
val client = HttpClient.newBuilder().build()
val request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/get"))
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
val text = response.body()
println(text)
}
Один и тот же обработчик подходит для любого GET, где ожидается текст. Бинарные форматы здесь не разбирают - строка остается сырой, как пришла по сети:
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/get"))
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
println(response.body().length)
}
Выведите тело ответа для
"https://httpbin.org/get?source=lab".
Отправьте чтение на "/headers" и
напечатайте длину строки тела ответа.