我有一个Groovy脚本,它使用URLConnection来处理GET请求(在这种情况下,它是获取身份验证令牌);
URLConnection loginURI = new URL("www.myaddress.fish").openConnection();
loginURI.setRequestProperty("Authorization","me:you");
response = loginURI.getInputStream();
没有什么复杂的,当响应是200或类似时,这段代码工作正常。响应包含我需要进行的详细信息。
但是,有时响应是4xx响应(最常见的是来自无效Authorization标头的400 Bad Request),并且通过SOAPUI或类似程序运行相同的请求,我可以看到响应正文包含有用信息(EG'您的用户名不正确“)。我希望能够捕获有用的信息进行处理,但我不知道该怎么做。
我尝试过传统的'try / catch'想法,但我得到了Java异常,而不是响应体。愚蠢地我尝试了沼泽标准
println response.text
在捕获部分,但这根本不起作用。假设响应主体存储在某处,我该如何阅读它?
看起来我看到的错误不是因为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有效感兴趣,所以它适用于我。