Groovy URLConnection 获取 4xx 响应的响应

Sli*_*y43 3 groovy urlconnection httpresponse http-status-code-400

我有一个 Groovy 脚本,它使用 URLConnection 来处理 GET 请求(在本例中是为了获取身份验证令牌);

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

没什么复杂的,当响应为 200 或类似值时,此代码可以正常工作。回复包含我需要取得进展的详细信息。

但是,有时响应是 4xx 响应(最常见的是来自无效授权标头的 400 Bad Request),并且通过 SOAPUI 或类似的方式运行相同的请求,我可以看到响应正文包含有用的信息(例如“您的用户名不正确”) ')。我希望能够捕获有用的信息进行处理,但我不知道该怎么做。

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

println response.text
Run Code Online (Sandbox Code Playgroud)

在 catch 部分,但这根本不起作用。假设响应正文存储在某处,我如何读取它?

Sli*_*y43 6

看起来我看到的错误不是因为 4xx 响应,而是因为当请求返回错误代码时 getInputStream() 无效。我现在所做的是首先请求responseCode(它总是存在),然后根据代码是什么将取决于我是getInputStream()还是getErrorStream()。

就我而言,我已将代码更改为;

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

我可能可以将 If 语句更改为更准确一点(200 不是唯一有效的响应),但由于我只对 200 有效感兴趣,所以它对我有用。