Как получить тело ответа с помощью HttpURLConnection, когда возвращается код, отличный от 2xx?
у меня есть проблема с получением ответа Json в случае, если сервер возвращает ошибку. Смотрите подробности ниже.
как я выполняю запрос
Я использую java.net.HttpURLConnection
. Я устанавливаю свойства запроса, затем я делаю:
conn = (HttpURLConnection) url.openConnection();
после этого, когда запрос успешен, я получаю ответ Json:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
}
return sb.toString();
... и проблема заключается в следующем:
Я не могу получить JSON, полученный, когда сервер возвращает некоторую ошибку, такую как 50x или 40x,. Следующие броски строки IOException:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
// throws java.io.IOException: Server returned HTTP response code: 401 for URL: www.example.com
сервер отправляет тело наверняка, я вижу его в external tool Burp Suite:
HTTP/1.1 401 Unauthorized
{"type":"AuthApiException","message":"AuthApiException","errors":[{"field":"email","message":"Invalid username and/or password."}]}
Я могу получить ответное сообщение (т. е. "внутренняя ошибка сервера") и код (т. е. "500"), используя следующие методы:
conn.getResponseMessage();
conn.getResponseCode();
но я не могу получить тело запроса... может быть, есть какой-то метод, который я не заметил в библиотеке?