当返回2xx以外的代码时,如何使用HttpURLConnection获取响应正文?

我在检索Json响应时遇到问题,以防服务器返回错误。详情见下文

我如何执行请求

我使用java.net.HttpURLConnection。我设置请求属性,然后执行以下操作:

conn=(HttpURLConnection)url.openConnection();

之后,当请求成功时,我得到响应Json:

br=新的BufferedReader(新的InputStreamReader((conn.getInputStream()));
sb=新的StringBuilder();
字符串输出;
而((output=br.readLine())!=null){
附加(输出);
}
使某人返回字符串();

。。。问题是:

当服务器返回一些错误(如50x或40x)时,我无法检索接收到的Json,。以下行引发IOException:

br=新的BufferedReader(新的InputStreamReader((conn.getInputStream()));
//抛出java.io.IOException:服务器返回URL:www.example.com的HTTP响应代码:401

服务器确实发送了body,我在外部工具Burp套件中看到了它:

HTTP/1.1
{“type”:“AuthApiException”,“message”:“AuthApiException”,“errors”:[{“field”:“email”,“message”:“无效的用户名和/或密码”。}]}

我可以使用以下方法获取响应消息(即“内部服务器错误”)和代码(即“500”):

连接getResponseMessage();
连接getResponseCode();

但我无法检索请求体。。。也许图书馆里有我没注意到的方法

如果响应代码不是200或2xx,请使用getErrorStream()而不是getInputStream()。

发表评论