Я изо всех сил пытаюсь успешно отправлять запросы GET с заголовком авторизации, используя HttpURLConnection. Возвращается код ошибки 400.
Я добился успеха с OKHttpClient, но попросил не использовать никаких зависимостей.
Вот мой код:
public static String GETReqUserProfiles() throws IOException {
URL url = new URL(UrlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty("Content-Type", "application/" + "json");
urlConnection.setRequestProperty("authorization", "Bearer " + MANAGEMENT_TOKEN);
urlConnection.connect();
if (urlConnection.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ urlConnection.getResponseCode());
}
String assembledOutput = "";
BufferedReader responseBuffer = new BufferedReader(new InputStreamReader(
(urlConnection.getInputStream())));
String output;
System.out.println("Output from Server:\n");
while ((output = responseBuffer.readLine()) != null) {
System.out.println(output);
assembledOutput = assembledOutput + output;
}
urlConnection.disconnect();
return assembledOutput;
}
ИЗМЕНИТЬ:
Все работает -
Проблема была в:
urlConnection.setDoOutput(true);
setDoOutput(true) : объявляет отправку тела с запросом. Запросы GET не требуют тела, поэтому его можно установить в false или закомментировать. Вместо этого это используется для POST, PATCH, PUT и т. д. (запросы, требующие тела).
Также обратите внимание:
urlConnection.setRequestMethod("GET");
Не нужно специально объявлять при отправке запроса GET (хотя я оставил в коде для удобства чтения)
Я подозреваю, что если вы включите setDoOutput(true) и не укажете метод запроса, метод по умолчанию будет POST-запросом.
setDoOutput(true)
устанавливает метод запроса POST, четко указан в Javadoc. - person user207421   schedule 29.02.2020