【问题标题】:httpclient timeouts? can's seem to get them to stickhttpclient超时?似乎可以让他们坚持下去
【发布时间】:2010-07-10 20:43:20
【问题描述】:

这是我用来创建多线程 httpclient 对象的代码。我正在尝试全面设置 4 秒超时,因此如果 4 秒内没有任何反应,则放弃请求。我看到某些请求的执行时间非常长,例如在 300 秒范围内。我似乎无法弄清楚为什么会这样。有什么想法吗?

HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, 4000);
    HttpConnectionParams.setSoTimeout(httpParams, 4000);

    // set request params

    httpParams.setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
    httpParams.setParameter("http.useragent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
    httpParams.setParameter("http.protocol.wait-for-continue", 4000);

    SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));

    ClientConnectionManager cm = new ThreadSafeClientConnManager(httpParams,schemeRegistry);
    HttpClient httpClient = new DefaultHttpClient(cm, httpParams);

【问题讨论】:

    标签: java http httpclient


    【解决方案1】:

    您设置的所有超时值仅尝试限制特定操作的时间,而不是请求的总时间。在某些情况下,超时根本不起作用。例如,如果 IP 被防火墙阻止,则连接超时无效。

    我找到的唯一解决方案是在不同的线程中启动我的请求并自己超时。您可以为此使用 ThreadPool 和 FutureTask。请参阅我对这个问题的回答,

    java native Process timeout

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多