在 Java 中读取错误响应正文

2022-08-31 10:17:33

在 Java 中,当 HTTP 结果为 404 范围时,此代码会引发异常:

URL url = new URL("http://stackoverflow.com/asdf404notfound");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.getInputStream(); // throws!

在我的情况下,我碰巧知道内容是404,但我仍然想阅读响应的正文。

(在我的实际情况下,响应代码是403,但响应的正文解释了拒绝的原因,我想向用户显示。

如何访问响应正文?


答案 1

这是错误报告(关闭,不会修复,不是错误)。

他们的建议是像这样编码:

HttpURLConnection httpConn = (HttpURLConnection)_urlConnection;
InputStream _is;
if (httpConn.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
    _is = httpConn.getInputStream();
} else {
     /* error from server */
    _is = httpConn.getErrorStream();
}

答案 2

这与我遇到的问题相同:如果您尝试从连接中读取,则会返回。
当状态代码高于 400 时,应改用。HttpUrlConnectionFileNotFoundExceptiongetInputStream()getErrorStream()

不仅如此,请注意,不仅200是成功状态代码,甚至201,204等也经常用作成功状态。

以下是我如何管理它的示例

... connection code code code ...

// Get the response code 
int statusCode = connection.getResponseCode();

InputStream is = null;

if (statusCode >= 200 && statusCode < 400) {
   // Create an InputStream in order to extract the response object
   is = connection.getInputStream();
}
else {
   is = connection.getErrorStream();
}

... callback/response to your handler....

通过这种方式,您将能够在成功和错误情况下获得所需的响应。

希望这有帮助!


推荐