28

我在网站上使用 Apache Httpclient 进行 Ajax 调用。在某些情况下,对外部 Web 服务的请求会失败,通常是:

处理请求时捕获的 I/O 异常 (java.net.ConnectException):连接超时:连接。

在这种情况下,我通常想跳过重试请求(Httpclient 似乎自动执行的操作)。

但是,我找不到任何方法、参数等来跳过重试。

任何人?

谢谢 Geert-Jan

4

5 回答 5

36

从 httpclient 4.3 开始使用 HttpClientBuilder

HttpClientBuilder.create().disableAutomaticRetries().build();
于 2013-10-23T15:07:06.533 回答
32
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));

这样就可以了。

于 2010-02-18T02:01:08.913 回答
6

好的。文档中有问题。API和方法也发生了变化。因此,如果您想使用DefaultHttpRequestRetryHandler,这里有一些方法,

DefaultHttpClient httpClient = new DefaultHttpClient();
DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, false);
httpClient.setHttpRequestRetryHandler(retryHandler);

或者

HttpClient httpClient = new DefaultHttpClient();
DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, false);
((AbstractHttpClient)httpClient).setHttpRequestRetryHandler(retryHandler);

在第一个中,我们使用具体的 DefaultHttpClient(它是 AbstractHttpClient 的子类,因此有 setHttpRequestRetryHandler() 方法。)

在第二个中,我们正在对 HttpClient 接口进行编程(遗憾的是,它没有公开该方法,这很奇怪!!嗯),所以我们必须做那个讨厌的演员。

于 2012-09-10T19:51:51.640 回答
5

HttpClient 教程中有描述。

 client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
           new DefaultHttpMethodRetryHandler());

有关更多信息,请参阅教程,例如,如果请求有副作用(即不是幂等的),这可能是有害的。

于 2010-02-18T02:06:47.250 回答
0

不需要强制转换为 AbstractHttpClient。另一种方法是使用AutoRetryHttpClient策略,并将DefaultServiceUnavailableRetryStrategy设置为 0 用于重试参数。更好的方法是扩展 AbstractHttpClient 或实现 HttpClient 以公开所需的方法。

于 2013-04-10T01:08:59.527 回答