Java : HttpClient 4. 1.2 : ConnectionTimeout, SocketTimeout 值设置无效

标签 java apache-httpclient-4.x

我正在使用 HttpClient 4.1.2。将 ConnectionTimeout 和 SocketTimeout 设置为一个值永远不会生效。

代码:

  Long startTime = null;
  DefaultHttpClient httpClient = new DefaultHttpClient();
  HttpParams params = httpClient.getParams();
  HttpConnectionParams.setConnectionTimeout(params, 30);
  HttpConnectionParams.setSoTimeout(params, 60);      
   HttpGet httpget = new HttpGet("http://localhost:8080/Test/ScteServer");        
      try {         
        startTime = System.currentTimeMillis();
        HttpResponse response = httpClient.execute(httpget);
      }
      catch(SocketTimeoutException se) {
        Long endTime = System.currentTimeMillis();
        System.out.println("SocketTimeoutException :: time elapsed :: " + (endTime-startTime));
        se.printStackTrace();
      }          
      catch(ConnectTimeoutException cte) {
        Long endTime = System.currentTimeMillis();
        System.out.println("ConnectTimeoutException :: time elapsed :: " + (endTime-startTime));
        cte.printStackTrace();
      }
      catch (ClientProtocolException e) {            
        e.printStackTrace();
      }
      catch (IOException e) {
        Long endTime = System.currentTimeMillis();
        System.out.println("IOException :: time elapsed :: " + (endTime-startTime) );            
        e.printStackTrace();
      }       

如果服务器关闭,则连接超时永远不会超过 400 毫秒,而它必须按照配置在 ~ 30 毫秒处超时。

套接字超时也是如此,在 doGet() 中 hibernate 5000 毫秒将引发套接字超时,该超时永远不会达到配置的 60 毫秒左右。需要 500 多毫秒。

谁能建议如何配置 HttpClient 4.1.2 以便它在配置的时间左右超时?

最佳答案

HttpConnectionParams 需要传递给连接管理器(参见 this question )。使用 DefaultHttpClient 时,您可以像这样设置这些参数:

    httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
    httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 60000);

参见 documentation还有!

关于Java : HttpClient 4. 1.2 : ConnectionTimeout, SocketTimeout 值设置无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9725492/

相关文章:

java - 基本算法的复杂性?

java - 如何修复 (SSLException) 收到致命警报 : protocol_version in Java

java - HttpClient 4.3.1 创建 HttpClient 实例的问题

java - Gradle重命名maven依赖包(HttpComponents, Android)

java - Hadoop:作业显示在作业浏览器中,但无法通过 api 访问 JobStatus

java - 在 CSV 文件中包含逗号

java - 如何将多个不相关的int值添加到数组中

java - 在 Java 中对 Stripes 框架的 Ajax 调用会导致请求正文为空

java - 统一码问题 : How to convert ’ to ’ in the response from HttpClient?

java - 如何在 Rest Assured 中为失败的 REST 调用实现重试逻辑