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

时间:2015-09-07 09:09:18

标签: java apache-httpclient-4.x ioexception

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

  

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

如果我发现IOException,这会抓住所有 Server 5xx Errors吗?

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

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

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

1 个答案:

答案 0 :(得分:10)

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

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

'HTTP 500'是服务器响应 - 有效服务器响应 - 表示错误情况。它有状态代码,标题和正文,这是200响应的所有内容。

文档说返回值是“对请求的[最终]响应”;只要服务器能够返回 有效响应,无论状态代码如何都是如此。