如果请求超时,HttpClient会多次执行请求

时间:2014-04-14 07:25:09

标签: java android httpclient connection-timeout

如果超时,

HttpClient执行请求4次。如果它没有超时那么它工作正常。它与HttpClient

有关

3 个答案:

答案 0 :(得分:5)

如果失败,我发现执行请求4次是HttpClient的默认行为。我不确定其他类型的失败,但至少有时间。

要禁用此行为,请执行以下操作:

DefaultHttpClient client = new DefaultHttpClient();
// Disable default behavior of HttpClient of retrying requests in case of failure
((AbstractHttpClient) client).setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));

此处重试次数设置为0以禁用重试。

我从this blog找到了解决方案。

答案 1 :(得分:3)

这解决了我的问题。使用httpclient 4.3及以上版本。

HttpClientBuilder.create().disableAutomaticRetries().build();

答案 2 :(得分:1)

Apache HttpClient在传输异常的情况下尝试连接5次。以下是doc所说的内容:

  

HttpClient将自动重试那些方法的5倍   HTTP请求仍在运行时因传输异常而失败   传输到目标服务器(即请求尚未完全   传送到服务器)。

要更改此行为,您需要实现HttpMethodRetryHandler接口