問題タブ [java-http-client]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4155 参照

java - Java HttpRequest タイムアウトが予期せず HttpConnectTimeoutException をスローする

java.net.httpJDK 11 でリリースされた新しいパッケージを使用しHttpRequestて、意図的に低い応答タイムアウトでアセンブルされています。

目的は、結果が正しく処理されることをテストすることHttpTimeoutExceptionですが、予期せず、この応答タイムアウト値が につながり、HttpConnectionTimeoutExceptionこのコードによってキャッチされています。

これは、応答タイムアウトにより、接続タイムアウトが発生したかのようにコードが動作することを意味します。私の理解では、接続タイムアウトと応答タイムアウトは別々の概念である必要があり、別々にキャッチして処理できるはずです。

に添付されたスタック トレースはHttpConnectionTimeoutException次のようになります。

タイムアウトの概念を誤解していますか? タイムアウト値は、デフォルトのタイムアウト値HttpRequestの代替手段を提供するだけですか? HttpClient接続と応答のタイムアウトを個別のイベントとしてキャッチする信頼できる方法はありますか?

価値があるのは、Javadoc forHttpRequest.Builder.timeout(Duration)が次のように述べていることです。

このリクエストのタイムアウトを設定します。指定されたタイムアウト内に応答が受信されない場合、HttpTimeoutException が HttpClient::send からスローされるか、HttpClient::sendAsync が HttpTimeoutException で例外的に完了します。タイムアウトを設定しないことの効果は、無限の Duration を設定することと同じです。永久にブロックします。

ややこしいのは、技術的にはメソッドのコントラクトが満たされてHttpConnectionTimeoutExceptionいるサブクラスです。しかし、これは役に立たないようです。HttpTimeoutExceptiontimeout(Duration)

(質問する前に: はい、渡された値は、例外がスローされるかどうかの決定要因です。したがって、例外は、インスタンスHttpRequest.Builder.timeout(Duration)の作成に使用される接続タイムアウト値に基づいていません。)HttpClient