28

WebサイトでのAjax呼び出しにApacheHttpclientを使用しています。場合によっては、外部Webサービスへのリクエストが失敗し、多くの場合、次のようになります。

要求の処理中にI/O例外(java.net.ConnectException)がキャッチされました:接続がタイムアウトしました:接続します。

その場合、ほとんどの場合、リクエストの再試行をスキップしたいと思います(Httpclientが自動的に実行するように見えること)。

ただし、再試行をスキップするメソッドやパラメータなどが見つかりません。

誰でも?

ありがとうGeert-Jan

4

5 に答える 5

36

httpclient 4.3から、HttpClientBuilderを使用します

HttpClientBuilder.create().disableAutomaticRetries().build();
于 2013-10-23T15:07:06.533 に答える
32
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));

それはそれをするでしょう。

于 2010-02-18T02:01:08.913 に答える
6

わかった。ドキュメントに問題があります。また、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インターフェイス(残念ながらそのメソッドを公開していません。これは奇妙です!!ええと)にプログラミングしているので、その厄介なキャストを行う必要があります。

于 2012-09-10T19:51:51.640 に答える
5

HttpClientチュートリアルに説明があります。

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

詳細については、チュートリアルを参照してください。たとえば、リクエストに副作用がある場合(つまり、べき等でない場合)、これは有害である可能性があります。

于 2010-02-18T02:06:47.250 に答える
0

AbstractHttpClientへのキャストは必要ありません。もう1つの方法は、再試行パラメーターにDefaultServiceUnavailableRetryStrategyを0に設定したAutoRetryHttpClientで戦略を使用することです。より良い方法は、AbstractHttpClientを拡張するか、HttpClientを実装して目的のメソッドを公開することです。

于 2013-04-10T01:08:59.527 に答える