【问题标题】:Handling HttpClient (Httpget) timeouts处理 HttpClient (Httpget) 超时
【发布时间】:2012-10-16 13:47:41
【问题描述】:

所以我正在运行一个多线程程序,该程序对 api 和一些它想要抓取的网页进行调用。在一些不寻常的情况下,httpget 会严重失败并导致程序“冻结”(线程永远不会退出,线程池永远不会关闭,main 永远不会退出等)

我需要为我正在建立的 http 连接设置超时。我正在使用 DefaultHttpClient

DefaultHttpClient httpclient = new DefaultHttpClient();

我没有设置任何参数。

有人可以帮我把这些超时,或者至少指出我应该在哪里寻找处理超时吗? (Apache 似乎有很棒的库,但似乎从来没有很好的例子)

【问题讨论】:

    标签: java httpclient apache-httpclient-4.x


    【解决方案1】:

    尝试如下所示的方法。

    int connectiontimeout = 1000; //1 second
    int sockettimeout = 1000;
    
    HttpParams httpparameters = new BasicHttpParams();
    
    HttpConnectionParams.setConnectionTimeout(httpparameters, connectiontimeout);
    HttpConnectionParams.setSoTimeout(httpparameters, sockettimeout);
    
    HttpClient httpclient = new DefaultHttpClient(httpparameters);
    

    【讨论】:

    • 顺便说一句,这已被弃用。
    【解决方案2】:

    你想要HttpConnectionParams。您可能需要区分连接超时和套接字超时(与读取有关,不是连接

    SO_TIMEOUT 以毫秒为单位定义默认套接字超时(SO_TIMEOUT),即等待数据的超时时间。

    CONNECTION_TIMEOUT 确定连接建立之前的超时时间。

    有关更多详细信息,请参阅here。这些选项。

    【讨论】:

      【解决方案3】:

      您可能想要使用两者中的一个,最好是第一个。

       HttpConnectionParams.setConnectionTimeout(int) 
      
       HttpConnection.setConnectionTimeout(int)
      

      作为:

       HttpConnectionParams.setConnectionTimeout( httpParams, 5000 );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多