Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Apache http客户端中设置连接超时?_Java_Http_Httpclient - Fatal编程技术网

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

Java 如何在Apache http客户端中设置连接超时?,java,http,httpclient,Java,Http,Httpclient,我想使用运行线程安全的异步HTTP请求。我注意到它不尊重我的CONNECTION\u TIMEOUT参数 代码是ColdFusion/Java混合的 client = loader.create("org.apache.http.impl.nio.client.DefaultHttpAsyncClient").init(); CoreConnectionPNames = loader.create("org.apache.http.params.CoreConnectionPNames");

我想使用运行线程安全的异步HTTP请求。我注意到它不尊重我的
CONNECTION\u TIMEOUT
参数

代码是ColdFusion/Java混合的

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();
不管我为连接超时提供了什么,请求总是返回200 OK。检查下面的输出

  • 如何设置有效的连接超时
  • 连接超时有什么作用吗
  • 输出

    200 OK http://www.google.com/
    
    200 OK http://www.google.com/
    
    [snip]
    
    5 requests using Async Client in: 2308 ms
    

    apache的HttpClient的文档有点零碎。在您的设置中尝试此选项(在版本4中对我有效):


    必须使用框架的类方法定义HttpParams对象

            HttpParams params = new BasicHttpParams();
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
            HttpConnectionParams.setConnectionTimeout(params, 2000);
    
            SchemeRegistry registry = new SchemeRegistry();
            registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
    
            ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
    
            HttpClient client = DefaultHttpClient(ccm, params);
    

    谢谢我正在试用你的代码,但是要把它翻译成CF需要额外的工作。对我来说太简单了。在前两个示例中,linse
    HTTPConnectionParams
    引用了我需要创建的对象。Porbably
    org.apache.http.params.
    但是您提供给
    setConnectionTimeout
    params
    参数来自哪里?我不能在那里抛出它,否则它会抛出一个
    params is undefined
    错误。。。如果这听起来很迟钝,很抱歉,但是使用java/CF混合代码是乏味的。另外,是否需要SchemeRegistry对象,我可以不使用它吗;这里有更多信息:javadoc在这里:
            HttpParams params = new BasicHttpParams();
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
            HttpConnectionParams.setConnectionTimeout(params, 2000);
    
            SchemeRegistry registry = new SchemeRegistry();
            registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
    
            ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);
    
            HttpClient client = DefaultHttpClient(ccm, params);