libreria - java: apache HttpClient> cómo deshabilitar reintentar
login httpclient java (5)
Estoy usando Apache Httpclient para llamadas ajax en un sitio web. En algunos casos, las solicitudes al servicio web externo fallan, a menudo con:
Se detectó una excepción de E / S (java.net.ConnectException) al procesar la solicitud: se agotó el tiempo de conexión: se conectó.
En ese caso, la mayoría de las veces, quiero omitir el reintento de la solicitud (algo que Httpclient parece hacer automáticamente).
Sin embargo, no puedo encontrar ningún método, parámetro, etc. para omitir el reintento.
¿nadie?
Gracias Geert-Jan
DE ACUERDO. Hay problema en la Documentación. También ha habido cambios en la API y los métodos. Así que si quieres usar DefaultHttpRequestRetryHandler
, aquí están las formas de hacerlo,
DefaultHttpClient httpClient = new DefaultHttpClient();
DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, false);
httpClient.setHttpRequestRetryHandler(retryHandler);
o
HttpClient httpClient = new DefaultHttpClient();
DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(0, false);
((AbstractHttpClient)httpClient).setHttpRequestRetryHandler(retryHandler);
En la primera, usamos DefaultHttpClient concreto (que es una subclase de AbstractHttpClient y, por lo tanto, tiene el método setHttpRequestRetryHandler ()).
En el segundo, estamos programando para la interfaz HttpClient (que lamentablemente no expone ese método, ¡y esto es raro! Ehh), así que tenemos que hacer ese reparto desagradable.
Desde httpclient 4.3 use HttpClientBuilder
HttpClientBuilder.create().disableAutomaticRetries().build();
El elenco a AbstractHttpClient no es necesario. Otra forma es usar una estrategia con AutoRetryHttpClient con AutoRetryHttpClient establecida en 0 para el parámetro de reintento. Una mejor manera sería extender el AbstractHttpClient o implementar HttpClient para exponer el método deseado.
Hay una descripción en el tutorial de HttpClient .
client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
Consulte el tutorial para obtener más información, por ejemplo, esto puede ser perjudicial si la solicitud tiene efectos secundarios (es decir, no es idempotente).
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
Eso lo haría.