gpt4 book ai didi

java - Apache HttpClient 临时错误 : NoHttpResponseException

转载 作者:行者123 更新时间:2023-12-05 07:52:46 25 4
gpt4 key购买 nike

我有一个 web 服务,它接受带有 XML 的 POST 方法。它工作正常,然后在某些随机情况下,它无法与服务器通信并抛出 IOException 消息 The target server failed to respond。随后的调用工作正常。

大多数情况下,当我调用一些电话然后让我的应用程序闲置 10 到 15 分钟时,就会发生这种情况。之后我进行的第一次调用返回此错误。

我尝试了一些东西......

我像这样设置重试处理程序

HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {

public boolean retryRequest(IOException e, int retryCount, HttpContext httpCtx) {
if (retryCount >= 3){
Logger.warn(CALLER, "Maximum tries reached, exception would be thrown to outer block");
return false;
}
if (e instanceof org.apache.http.NoHttpResponseException){
Logger.warn(CALLER, "No response from server on "+retryCount+" call");
return true;
}
return false;
}
};

httpPost.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryHandler);

但是这次重试从未被调用过。 (是的,我使用的是正确的 instanceof 子句)。在调试此类时从未调用过。

我什至尝试设置 HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false); 但没有用。有人可以建议我现在可以做什么吗?

重要除了弄清楚为什么我得到异常,我的一个重要问题是为什么重试处理程序不在这里工作?

最佳答案

很可能由连接管理器保持 Activity 状态的持久连接变得陈旧。也就是说,目标服务器在其端关闭连接而 HttpClient 无法对该事件使用react,而连接处于空闲状态,从而使连接处于半关闭状态或“失效”状态。通常这不是问题。 HttpClient 使用多种技术在从池租用时验证连接的有效性。即使失效连接检查被禁用并且失效连接用于传输请求消息,请求执行通常在写入操作中失败并出现 SocketException 并自动重试。然而,在某些情况下,写操作可以无异常终止,随后的读操作返回 -1(流结束)。在这种情况下,HttpClient 别无选择,只能假定请求成功但服务器未能响应,这很可能是由于服务器端出现意外错误。

补救这种情况的最简单方法是在一段时间不活动后从池中逐出过期连接和空闲时间超过 1 分钟的连接。详情请见2.5. Connection eviction policy HttpClient 4.5 教程。

关于java - Apache HttpClient 临时错误 : NoHttpResponseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33278760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com