如何在Apache http客户端中设置连接超时?

Moh*_*mad 11 java http httpclient

我想使用HTTPClient运行线程安全的异步HTTP请求.我注意到它不尊重我的CONNECTION_TIMEOUT论点.

代码是ColdFusion/Java hybrid.

client = loader.create("org.apache.http.impl.nio.client.DefaultHttpAsyncClient").init();
CoreConnectionPNames = loader.create("org.apache.http.params.CoreConnectionPNames");

client.getParams()
      .setIntParameter(JavaCast("string", CoreConnectionPNames.SO_TIMEOUT), 10)
      .setIntParameter(JavaCast("string", CoreConnectionPNames.CONNECTION_TIMEOUT), 10);

client.start();

request = loader.create("org.apache.http.client.methods.HttpGet").init("http://www.google.com");
future = client.execute(request, javacast("null", ""));

try {
   response = future.get();
}
catch(e any) {}

client.getConnectionManager().shutdown();
Run Code Online (Sandbox Code Playgroud)

  无论我为CONNECTION_TIMEOUT提供什么,请求总是返回200 OK.检查下面的输出.

  1. 如何设置有效的连接超时?
  2. CONNECTION_TIMEOUT能做什么吗?

产量

200 OK http://www.google.com/

200 OK http://www.google.com/

[snip]

5 requests using Async Client in: 2308 ms
Run Code Online (Sandbox Code Playgroud)

Set*_*eth 3

apache 的 HttpClient 的文档有点参差不齐。在您的设置中尝试一下(它对我的版本 4 有效):

HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);

... set more parameters here if you want to ...

SchemeRegistry schemeRegistry = new SchemeRegistry();

.. do whatever you ant with the scheme registry here ...

ThreadSafeClientConnManager connectionManager = new ThreadSafeClientConnManager(params, schemeRegistry);

client = new DefaultHttpClient(connectionManager, params);
Run Code Online (Sandbox Code Playgroud)