如果服务器返回错误状态,java.net.HttpUrlConnection 是否总是抛出 IOException?

Loc*_*Loc 1 java exception http-status-codes httpurlconnection

我正在使用java.net.HttpUrlConnection向我的服务器发出 Http 请求。我意识到如果服务器返回错误状态(例如 400)。HttpUrlConnection 将抛出与错误状态对应的 IOException。

我的问题是: 如果服务器返回错误状态(4xx、5xx),HttpUrlConnection 是否总是抛出 IOException?

我查看了HttpUrlConnection API 描述,但我无法回答我的问题。

更新:请看我的测试:

public static void main(String[] args) {
    try {
        
        String url = "https://www.googleapis.com/oauth2/v3/userinfo?access_token=___fake_token";
        HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection();
        
        conn.getResponseCode();
        conn.getInputStream();
        
    } catch (Exception ex) {
        ex.printStackTrace();
        // Print IOException: java.io.IOException: Server returned HTTP response code: 401 for URL: https://www.googleapis.com/oauth2/v3/userinfo?access_token=abc

        // If I commented conn.getResponseCode() -> The same IOException
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

use*_*421 5

如果您getResponseCode()之前检查过getInputStream()并且问题是 HTTP 返回码而不是连接错误,则不会。