3

私はApacheHttpClientを初めて使用します。次のコードを使用して、特定の時間間隔の後にHTTP接続タイムアウト(切断)を取得しました。

PostMethod method = new PostMethod(authURL);
HttpClient client = new HttpClient();
HttpClientParams params= new HttpClientParams();
params.setParameter(params.CONNECTION_MANAGER_TIMEOUT, 10); //10 Nano second
client.executeMethod(method);

しかし、タイムアウト/切断することを期待せずに1分以上待機しますか?問題はどこにありますか?

4

3 に答える 3

4

HTTPClient には 2 つのタイムアウトが関係しています。両方を設定してみてください。

  client.getHttpConnectionManager().
        getParams().setConnectionTimeout(5000);
  client.getHttpConnectionManager().
        getParams().setSoTimeout(5000);

ただし、接続がネイティブ ソケット呼び出しでスタックしている場合、値は無視されます。そのため、タイムアウトできるように別のスレッドでリクエストを実行する必要がある場合があります。その方法については、この質問に対する私の回答を参照してください。

Java ネイティブ プロセスのタイムアウト

于 2009-12-18T00:58:36.117 に答える
1

接続マネージャーから接続を取得しようとする行為に時間がかかりすぎると、接続マネージャーのタイムアウトがトリガーされます。これは、http 接続自体のタイムアウトとは異なります。代わりに HttpClientParams.setSoTimeout() を使用してください。

http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/params/HttpMethodParams.html#setSoTimeout%28int%29

于 2009-12-17T23:00:16.950 に答える
0

SO_TIMEOUTの設定を見たことがありますか?

メソッドの実行時に使用されるソケットタイムアウト(SO_TIMEOUT)をミリ秒単位で設定します。ゼロのタイムアウト値は、無限のタイムアウトとして解釈されます。

于 2009-12-17T22:56:58.330 に答える