有没有办法为HttpClient的整个执行指定超时?
我尝试过以下方法:
httpClient.getParams().setParameter("http.socket.timeout", timeout * 1000);
httpClient.getParams().setParameter("http.connection.timeout", timeout * 1000);
httpClient.getParams().setParameter("http.connection-manager.timeout", new Long(timeout * 1000));
httpClient.getParams().setParameter("http.protocol.head-body-timeout", timeout * 1000);
它实际上工作正常,除非远程主机发回数据 - 即使是一个字节/秒 - 它将继续永远读取!但我想在10秒内中断连接,无论主机是否响应 .
6 回答
目前无法设置该类型的最大请求持续时间:基本上您想要说 I don't care whether or not any specific request stage times out, but the entire request must not last longer than 15 seconds (例如) .
最好的办法是运行一个单独的计时器,当它到期时,获取HttpClient实例使用的连接管理器并关闭连接,这应该终止链接 . 如果这对您有用,请告诉我 .
对于较新版本的httpclient(例如http组件4.3 - https://hc.apache.org/httpcomponents-client-4.3.x/index.html):
按照Femi的建议,工作正常 . 谢谢!
基于其他答案,我的解决方案是使用
HttpRequestInterceptor
将中止运行添加到每个请求 . 我换了Timer
换了ScheduledExecutorService
.在HttpClient 4.3版本中,您可以使用以下示例..让我们说5秒钟
这也是有效的: