如果服务器出现错误状态 return,java.net.HttpUrlConnection 是否总是抛出 IOException?
Does java.net.HttpUrlConnection always throw IOException if there is an error status return by Server?
我正在使用 java.net.HttpUrlConnection 向我的服务器发出 Http 请求。我意识到如果服务器 return 错误状态(例如 400)。 HttpUrlConnection 会抛出对应错误状态的IOException。
我的问题是:如果服务器 return 错误状态(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
}
}
谢谢!
如果您在 getInputStream()
之前检查 getResponseCode()
并且问题是 HTTP return 代码而不是连接错误,则不会。
我正在使用 java.net.HttpUrlConnection 向我的服务器发出 Http 请求。我意识到如果服务器 return 错误状态(例如 400)。 HttpUrlConnection 会抛出对应错误状态的IOException。
我的问题是:如果服务器 return 错误状态(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
}
}
谢谢!
如果您在 getInputStream()
之前检查 getResponseCode()
并且问题是 HTTP return 代码而不是连接错误,则不会。