如果服务器返回错误状态,java.net.HttpUrlConnection是否总是抛出IOException?
我正在使用java.net.HttpUrlConnection向我的服务器发出Http请求。我意识到如果服务器返回错误状态(例如400)。HttpUrlConnection将引发与错误状态对应的IOException 我的问题是:如果服务器返回错误状态(4xx,5xx),HttpUrlConnection是否总是抛出IOException? 我查看了API描述,但无法回答我的问题 更新:请查看我的测试:如果服务器返回错误状态,java.net.HttpUrlConnection是否总是抛出IOException?,java,exception,httpurlconnection,http-status-codes,Java,Exception,Httpurlconnection,Http Status Codes,我正在使用java.net.HttpUrlConnection向我的服务器发出Http请求。我意识到如果服务器返回错误状态(例如400)。HttpUrlConnection将引发与错误状态对应的IOException 我的问题是:如果服务器返回错误状态(4xx,5xx),HttpUrlConnection是否总是抛出IOException? 我查看了API描述,但无法回答我的问题 更新:请查看我的测试: public static void main(String[] args) { t
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返回代码而不是连接错误,则不会出现问题。如果在getInputStream()
之前选中getResponseCode()
,问题是HTTP返回代码而不是连接错误,则不会出现问题。我包括了一个测试。我在getInputStream之前调用getResponseCode,得到IOException。请看我的例子@Loc在这两种情况下,getInputStream()
都会引发异常。您的新示例无效,因为您忽略了getResponseCode()
的结果。如果您像我假设的那样正确编程,您会看到值是401,并且根本没有尝试调用getInputStream()
。我现在明白了。非常感谢。我包括了一个测试。我在getInputStream之前调用getResponseCode,得到IOException。请看我的例子@Loc在这两种情况下,getInputStream()
都会引发异常。您的新示例无效,因为您忽略了getResponseCode()
的结果。如果您像我假设的那样正确编程,您会看到值是401,并且根本没有尝试调用getInputStream()
。我现在明白了。非常感谢。HTTP错误401-未经授权:由于凭据无效,访问被拒绝。如果以下条件为真,则会发生此行为:尝试查看的网站使用集成的Windows身份验证。网站的应用程序池在身份验证过程中回收。HTTP错误401-未经授权:由于凭据无效,访问被拒绝。如果以下条件为真,则会发生此行为:尝试查看的网站使用集成的Windows身份验证。网站的应用程序池在身份验证过程中回收。