Я пытаюсь отправить HTTP-запрос в REST API, для которого требуется ключ авторизации. Мой код работает для REST API, которым не требуется авторизация, но с этим я получаю только ошибку 403. Мне нужна помощь
.setRequestProperty("Авторизация", ключ) не работает. Я пытался отправить свой ключ с помощью «Bearer» +, но все равно ничего.
Вот API: https://developer.clashroyale.com/#/начало работы
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class Json {
public static void main(String[] args) {
try {
String key;
URL url = new URL("https://api.clashroyale.com/v1/players/%23PPCY9Y2J/upcomingchests");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Authorization", key);
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Если ваш ключ JWT, попробуйте использовать conn.setRequestProperty("Authorization", "Bearer " + key);
Когда вы переходите к документации в https://developer.clashroyale.com/#/документация и выбираете «Попробовать» запрос, он показывает пример запроса с использованием curl. Например:
curl -X GET --header 'Accept: application/json' --header "authorization: Bearer (token)" 'https://api.clashroyale.com/v1/locations?limit=5'
Там вы можете видеть, что «Авторизация» написана строчными буквами и что вам нужно «Bearer» перед вашим ключом.
Поэтому измените эту строку:
conn.setRequestProperty("Authorization", key);
Для:
conn.setRequestProperty("authorization", "Bearer " + key);
Я почти уверен, что это чувствительно к регистру. Используйте: "авторизация: Bearer <токен API>". По существу строчная буква «а» и добавить Bearer.