java:apache HttpClient>如何禁用重试
我在网站上使用Apache Httpclient进行Ajax调用。 在某些情况下,对外部Web服务的请求失败,通常是:
处理请求时捕获的I / Oexception(java.net.ConnectException):连接超时:连接。
在这种情况下,我经常想跳过重试请求(Httpclient似乎自动执行的操作)。
但是,我找不到任何方法,参数等来跳过重试。
任何人?
谢谢Geert-Jan
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
那样做。
从httpclient 4.3使用HttpClientBuilder
HttpClientBuilder.create().disableAutomaticRetries().build();
好。 文档中存在问题。 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接口(遗憾的是没有公开那个方法,这很奇怪!!呃),所以我们必须做那个讨厌的演员。
HttpClient教程中有一个描述。
client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
有关详细信息,请参阅教程 ,例如,如果请求具有副作用(即不是幂等),这可能会有害。
不需要转换为AbstractHttpClient。 另一种方法是使用具有AutoRetryHttpClient的策略, 并将 DefaultServiceUnavailableRetryStrategy设置为0以用于重试参数。 更好的方法是扩展AbstractHttpClient或实现HttpClient以公开所需的方法。
- Java服务器自签名证书+客户端证书和SSL – 连接重置
- JAVA:http发布请求
- java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):connect
- Android无效使用SingleClientConnManager:仍然分配了连接
- 正确使用Apache HttpClient以及何时关闭它。
- HttpClient:如何从现有连接获取底层套接字?
- 使用HTTPClient或HttpUrlConnection?
- 如何在apache http客户端中为所有请求设置默认头?
- 在使用NTLM进行身份validation时,HttpClient 4.1.1返回401,浏览器工作正常