我在网站上使用Apache Httpclient进行Ajax调用。在某些情况下,对外部Web服务的请求失败,通常是:
处理请求时捕获的I / O异常(java.net.ConnectException):连接超时:连接。
在这种情况下,我经常想跳过重试请求(Httpclient似乎自动执行的操作)。
但是,我找不到任何方法,参数等来跳过重试。
人?
感谢Geert-Jan
答案 0 :(得分:31)
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
那就可以了。
答案 1 :(得分:30)
从httpclient 4.3使用HttpClientBuilder
HttpClientBuilder.create().disableAutomaticRetries().build();
答案 2 :(得分:6)
HttpClient tutorial中有说明。
client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
有关详细信息,请参阅tutorial,例如,如果请求有副作用(即不是幂等),这可能会有害。
答案 3 :(得分: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接口(遗憾的是没有公开该方法,这很奇怪!!呃),所以我们必须做那个令人讨厌的演员。
答案 4 :(得分:0)
不需要强制转换为AbstractHttpClient。另一种方法是使用AutoRetryHttpClient并将DefaultServiceUnavailableRetryStrategy设置为0的策略用于重试参数。更好的方法是扩展AbstractHttpClient或实现HttpClient以公开所需的方法。