Apache HttpClient执行是否会对所有HTTP 5XX错误抛出IOException?

Diy*_*kir 4 java ioexception apache-httpclient-4.x

Apache的HttpClient的文档execute(HttpHost target, HttpRequest request)方法,说:

IOException - 如果出现问题或连接中止

如果我捕获IOException,这会捕获所有 服务器5xx错误吗?

try {
  response = client.execute(httpHost, request);
} catch (IOException e) {
  // throw custom Exception
} finally {
  // close response and client
}
Run Code Online (Sandbox Code Playgroud)

我问的原因是,在这个逻辑之后的其他地方,我们正在做类似以下的事情:

if (response.getStatusLine().getStatusCode() >= 500) {
  // Could we ever reach this point after the code above?
}
Run Code Online (Sandbox Code Playgroud)

use*_*740 10

不,HttpClient 不会任何 500/5xx响应抛出 IOException.

当低级别连接失败(例如,无效主机名,没有服务器侦听)或TCP管道异常中断(例如,互联网连接丢失)时,才会发生IOException .

"HTTP 500"是服务器响应 - 有效的服务器响应 - 用于指示错误情况.它有一个状态代码,标题和正文,这是200响应的所有内容.

文档说返回值是" 对请求的[最终]响应 "; 这只要服务器能够返回不管状态代码是真实的一个有效的响应.