Groovy URLConnection получает ответ для ответов 4xx - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть скрипт Groovy, который использует URLConnection для обработки запроса GET (в данном случае это токен аутентификации);

URLConnection loginURI = new URL("www.myaddress.fish").openConnection();
loginURI.setRequestProperty("Authorization","me:you");
response = loginURI.getInputStream();

Ничего сложного, и этот код отлично работает, когда ответ 200 или похожий. Ответ содержит детали, которые мне нужны для прогресса.

Однако иногда ответом является ответ 4xx (наиболее распространенным является 400 неверных запросов из недопустимого заголовка авторизации), и при выполнении того же запроса через SOAPUI или аналогичный я вижу, что тело ответа содержит полезную информацию (например, ваш неверное имя пользователя »). Я хочу иметь возможность собирать эту полезную информацию для обработки, но я не уверен, как это сделать.

Я попробовал традиционную идею "попробуй / поймай", но я получаю исключение Java, а не тело ответа. По глупости пробовал болотный стандарт

println response.text

В сегменте вылова, но это не сработало вообще. Предполагая, что тело ответа где-то хранится, как я могу его прочитать?

1 Ответ

0 голосов
/ 05 сентября 2018

Похоже, ошибка, которую я видел, была не из-за ответа 4xx, а потому, что getInputStream () недействителен, когда запрос возвратил код ошибки. Теперь я сначала запросил responseCode (который всегда существует), а затем, в зависимости от того, что код, будет зависеть от того, получу ли я getInputStream () или getErrorStream ().

В моем случае я изменил код на;

responseCode=loginURI.getResponseCode();
if(responseCode != 200){
    response = loginURI.getErrorStream();
}else{
    response = loginURI.getInputStream();
}
println "login response:" + response.text;

Возможно, я мог бы изменить оператор If на более точный (200 - не единственный действительный ответ), но, поскольку меня интересует только 200, тогда он работает для меня.

...