私はWebサイトのAjax呼び出しにApache Httpclientを使用しています。場合によっては、外部Webサービスへのリクエストが失敗することがあり、多くの場合、
要求の処理中にI/O例外(Java.net.ConnectException)がキャッチされました:接続がタイムアウトしました:接続。
その場合、たいていの場合、リクエストの再試行(Httpclientが自動的に行うように見えるもの)をスキップしたいと思います。
しかし、再試行をスキップするためのメソッドやパラメーターなどが見つかりません。
誰でも?
ありがとうGeert-Jan
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
それで十分でしょう。
Httpclient 4.3からHttpClientBuilderを使用
HttpClientBuilder.create().disableAutomaticRetries().build();
HttpClient tutorial に説明があります。
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()メソッドがあります)。
2番目の例では、HttpClientインターフェイス(残念ながらそのメソッドを公開しておらず、これは奇妙な!! ehh)にプログラミングしているので、その厄介なキャストを実行する必要があります。
AbstractHttpClientへのキャストは必要ありません。別の方法は、再試行パラメーターに対して DefaultServiceUnavailableRetryStrategy を0に設定して AutoRetryHttpClient を使用して戦略を使用することです。より良い方法は、AbstractHttpClientを拡張するか、HttpClientを実装して目的のメソッドを公開することです。