Apache HttpClient 会在所有 HTTP 5XX 错误上执行抛出 IOException 吗?
Will Apache HttpClient execute throw an IOException on ALL HTTP 5XX errors?
execute(HttpHost target, HttpRequest request)
方法的 Apache HttpClient docs 说:
IOException - in case of a problem or the connection was aborted
如果我捕捉到 IOException,它会捕捉到 ALL 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?
}
不,HttpClient 不会为 any 500/5xx 响应 抛出 IOException。
IOException 仅在 low-level 连接失败(例如主机名无效,没有服务器侦听)或 TCP 管道异常中断(例如互联网连接)时发生丢失了)。
'HTTP 500' 是服务器响应 - 有效 服务器响应 - 指示错误情况。它有一个状态代码 headers 和 body,这是 200 响应的所有内容。
文档说 return 值是“对请求的 [最终] 响应 ”;只要服务器能够 return a 有效响应,无论状态代码如何,都是如此。
execute(HttpHost target, HttpRequest request)
方法的 Apache HttpClient docs 说:
IOException - in case of a problem or the connection was aborted
如果我捕捉到 IOException,它会捕捉到 ALL 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?
}
不,HttpClient 不会为 any 500/5xx 响应 抛出 IOException。
IOException 仅在 low-level 连接失败(例如主机名无效,没有服务器侦听)或 TCP 管道异常中断(例如互联网连接)时发生丢失了)。
'HTTP 500' 是服务器响应 - 有效 服务器响应 - 指示错误情况。它有一个状态代码 headers 和 body,这是 200 响应的所有内容。
文档说 return 值是“对请求的 [最终] 响应 ”;只要服务器能够 return a 有效响应,无论状态代码如何,都是如此。