Переход по редиректу в Java
Сервер может ответить кодом перенаправления и
новым адресом в заголовке. Поведение клиента задают
при сборке 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;
public class Main {
public static void main(String[] args) throws Exception {
URI target = URI.create(
"https://httpbin.org/redirect/1",
);
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NEVER)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(target)
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.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;
public class Main {
public static void main(String[] args) throws Exception {
URI target = URI.create(
"https://httpbin.org/redirect/1",
);
HttpClient client = HttpClient.newBuilder()
.followRedirects(HttpClient.Redirect.NORMAL)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(target)
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.println(response.statusCode());
}
}
Выведите код ответа для
"https://httpbin.org/redirect/1",
если клиент не следует перенаправлениям.
Отправьте два чтения на тот же адрес: сначала без следования редиректу, затем с обычным режимом. Напечатайте оба кода через пробел.