3

我是 Apache 新手HttpClient,我使用以下代码在特定时间间隔后获取 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);

但它等待超过一分钟没有任何希望超时/断开连接?问题可能出在哪里?

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 回答