org.apache.commons.httpclient.HttpClient卡住了请求

时间:2010-06-13 11:36:55

标签: java apache http

我有那段代码:

 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();
          }

不知何故,代码在网上不时出现问题:执行请求。

我无法找到请求超时的配置(不是连接超时),有人可能会帮助我,还是有些事我做错了?

我正在使用的client

2 个答案:

答案 0 :(得分:3)

您也可以使用setSoTimeout()设置套接字读取时间,但这也不能保证。

唯一的解决方案是在不同的线程中运行请求并在超时后中断线程。您可以使用FutureTask来执行此操作。有关示例,请参阅我对此问题的回答,

java native Process timeout

答案 1 :(得分:-1)

PoolingConnectionManager在每个路由和总计上保持最大连接限制。默认情况下,此实现将为每个给定路由创建不超过2个并发连接,并且总共不再有20个连接。对于许多实际应用程序而言,这些限制可能过于严格,特别是如果它们使用HTTP作为其服务的传输协议。但是,可以使用HTTP参数调整连接限制。 有关更多信息,请参阅PoolingClientConnectionManager Java API