Ключ доступа в Java
Закрытые API проверяют ключ в заголовке
"Authorization". Форма "Bearer"
с пробелом и секретом - распространенный вариант.
Клиент JDK добавляет пару имя-значение в построитель
запроса так же, как "Content-Type".
Эндпоинт "/bearer" на httpbin подтверждает
токен "secret". Достаточно напечатать код
состояния после обмена:
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/bearer"))
.header("Authorization", "Bearer secret")
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.println(response.statusCode());
}
}
Без заголовка тот же адрес отвечает отказом. Код
401 сигнализирует, что ключ не передан
или не принят:
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/bearer"))
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.println(response.statusCode());
}
}