簡體   English   中英

org.apache.commons.httpclient.HttpClient卡在請求上

[英]org.apache.commons.httpclient.HttpClient stuck on request

我有該代碼:

 while(!lastPage && currentPage < maxPageSize){


            StringBuilder request = new StringBuilder("http://catalog.bizrate.com/services/catalog/v1/us/" + " some more ...");

            currentPage++;
            HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager());
            client.getHttpConnectionManager().getParams().setConnectionTimeout(15000);



            GetMethod get = new GetMethod(request.toString());

            HostConfiguration configuration = new HostConfiguration();

            int iGetResultCode = client.executeMethod(configuration, get);
            if (iGetResultCode != HttpStatus.SC_OK) {
                System.err.println("Method failed: " + get.getStatusLine());
                return;
            }
            XMLStreamReader reader
                    = XMLInputFactory.newInstance().createXMLStreamReader(get.getResponseBodyAsStream());
            while (reader.hasNext()) {
                int type = reader.next();
            // some more xml parsing ... 
            }
            reader.close();
            get.releaseConnection();
          }

不知何故,代碼不時在線上:執行請求。

我找不到請求超時(而不是連接超時)的配置,也許有人可以幫助我,還是我在做一些根本錯誤的事情?

我正在使用的客戶端

您也可以使用setSoTimeout()設置套接字讀取timeou,但這也不保證。

唯一的解決方案是在另一個線程中運行請求,並在超時后中斷該線程。 您可以使用FutureTask來執行此操作。 有關示例,請參見我對這個問題的回答,

java本機進程超時

PoolingConnectionManager維護每個路由的總連接數上限。 默認情況下,此實現將為每個給定路由創建不超過2個並發連接,並且總共不超過20個連接。 對於許多現實應用程序,這些限制可能證明過於嚴格,特別是如果它們使用HTTP作為其服務的傳輸協議。 但是,可以使用HTTP參數來調整連接限制。 有關更多信息,您可以參考PoolingClientConnectionManager Java API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM