Ответ 1
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
Это сделало бы это.
Я использую Apache Httpclient для Ajax-вызовов на веб-сайте. В некоторых случаях запросы на внешний вебсервис терпят неудачу, часто с:
Исключение I/O (java.net.ConnectException), обнаруженное при обработке запроса: время ожидания подключения: connect.
В этом случае, чаще всего, я хочу пропустить повтор запроса (что-то, что Httpclient, кажется, делает автоматически).
Однако я не могу найти какой-либо метод, param и т.д., чтобы пропустить повторную попытку.
кто-нибудь?
Спасибо Geert-Jan
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
Это сделало бы это.
Из httpclient 4.3 используйте HttpClientBuilder
HttpClientBuilder.create().disableAutomaticRetries().build();
Описание в Учебник HttpClient.
client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
Дополнительную информацию см. в tutorial, например, это может быть вредным, если запрос имеет побочные эффекты (то есть не является идемпотентным).
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 (который, к сожалению, не раскрывает этот метод, и это странно!! ehh), поэтому нам нужно сделать этот неприятный листинг.
Приведение в AbstractHttpClient не требуется. Другой способ - использовать стратегию с AutoRetryHttpClient с DefaultServiceUnavailableRetryStrategy для параметра retry задано значение 0. Лучше всего было бы расширить AbstractHttpClient или реализовать HttpClient, чтобы открыть желаемый метод.