Переход по редиректу в Kotlin
Сервер может ответить кодом перенаправления и
новым адресом в заголовке. Поведение клиента задают
при сборке HttpClient через
followRedirects.
Режим Redirect.NEVER останавливается на
первом ответе. Для "/redirect/1" код будет
перенаправления, а не финальный успех:
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
fun main() {
val target = URI.create(
"https://httpbin.org/redirect/1",
)
val client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NEVER)
.build()
val request = HttpRequest.newBuilder()
.uri(target)
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
println(response.statusCode())
}
Режим Redirect.NORMAL следует по GET
перенаправлениям и возвращает ответ конечного
адреса. Тот же путь дает другой код:
import java.net.URI
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
fun main() {
val target = URI.create(
"https://httpbin.org/redirect/1",
)
val client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build()
val request = HttpRequest.newBuilder()
.uri(target)
.GET()
.build()
val response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
)
println(response.statusCode())
}
Выведите код ответа для
"https://httpbin.org/redirect/1",
если клиент не следует перенаправлениям.
Отправьте два чтения на тот же адрес: сначала без следования редиректу, затем с обычным режимом. Напечатайте оба кода через пробел.