java: apache HttpClient> как отключить повтор - PullRequest
27 голосов
/ 18 февраля 2010

Я использую Apache Httpclient для Ajax-вызовов на сайте.В некоторых случаях запросы к внешнему веб-сервису завершаются неудачно, часто с:

Исключением ввода-вывода (java.net.ConnectException) при обработке запроса: Тайм-аут соединения: соединение.

В этом случае чаще всего я хочу пропустить повторную попытку запроса (что, похоже, делает Httpclient автоматически).

Однако я не могу найти какой-либо метод, параметр и т. Д., Чтобы пропустить повторную попытку.

кто-нибудь?

Спасибо, Герт-Ян

Ответы [ 5 ]

31 голосов
/ 18 февраля 2010
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));

Это сделало бы это.

30 голосов
/ 23 октября 2013

С httpclient 4.3 используйте HttpClientBuilder

HttpClientBuilder.create().disableAutomaticRetries().build();
6 голосов
/ 10 сентября 2012

OK. Существует проблема в документации. Также произошли изменения в 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 (который, к сожалению, не раскрывает этот метод, и это странно !! да), так что мы должны сделать это неприятное приведение.

6 голосов
/ 18 февраля 2010

В учебнике HttpClient есть описание .

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

См. Учебник для получения дополнительной информации, например, это может быть вредно, если запрос имеет сторонуэффекты (т.е. не идемпотент).

0 голосов
/ 10 апреля 2013

Приведение к AbstractHttpClient не требуется. Другой способ - использовать стратегию с AutoRetryHttpClient с DefaultServiceUnavailableRetryStrategy , установленным в 0 для параметра повтора Лучшим способом было бы расширить AbstractHttpClient или реализовать HttpClient для предоставления нужного метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...