java:apache HttpClient>如何禁用重试

Gee*_*Jan 27 java httpclient

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

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

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

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

任何人?

谢谢Geert-Jan

Eli*_*lie 31

client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
Run Code Online (Sandbox Code Playgroud)

那样做会.

  • 今天这不编译,需要使用jdigital => client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler(0,false)); 嗯,但它仍然无法正常工作 (4认同)

Man*_*noj 30

从httpclient 4.3使用HttpClientBuilder

HttpClientBuilder.create().disableAutomaticRetries().build();
Run Code Online (Sandbox Code Playgroud)


jdi*_*tal 6

HttpClient教程中有一个描述.

 client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
           new DefaultHttpMethodRetryHandler());
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅教程,例如,如果请求具有副作用(即不是幂等),这可能会有害.


小智 6

好.文档中存在问题.API和方法也发生了变化.所以,如果你想使用DefaultHttpRequestRetryHandler,这里有方法,

DefaultHttpClient httpClient = new DefaultHttpClient();
DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, false);
httpClient.setHttpRequestRetryHandler(retryHandler);
Run Code Online (Sandbox Code Playgroud)

要么

HttpClient httpClient = new DefaultHttpClient();
DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, false);
((AbstractHttpClient)httpClient).setHttpRequestRetryHandler(retryHandler);
Run Code Online (Sandbox Code Playgroud)

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

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