Groovy URLConnection获取4xx响应的响应

时间:2018-09-05 08:20:00

标签: groovy httpresponse urlconnection http-status-code-400

我有一个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'your用户名不正确”)。我希望能够捕获有用的信息以进行处理,但是我不确定该怎么做。

我尝试了传统的“ try / catch”想法,但是得到了Java异常而不是响应正文。我愚蠢地尝试了沼泽标准

println response.text

在捕获部分,但这根本不起作用。假设响应主体存储在某个地方,我如何读取它?

1 个答案:

答案 0 :(得分:0)

看起来我看到的错误不是由于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有效,因此它对我有用。