【问题标题】:Java Apache HttpClient EnityUtils blockJava Apache HttpClient EnityUtils 块
【发布时间】:2011-11-25 20:32:59
【问题描述】:

我目前正在开发一个使用 Apache HttpClient 4.1.2 的项目,它从网站检索一些数据。

应用程序的作用:它进入一个网页,然后进入下一个(找到的)页面,直到它到达末尾(例如:转到第 1 页 -> 再找到 20 个页面 -> 每隔 20 个页面去一次) .问题是它在检索一些随机页面时卡住了,并且无法继续抓取。

这是一些代码:

DefaultHttpClient mainHttp;
HttpPost post;
HttpResponse response;
HttpEntity entity;
String s;
int curPage = 1;
int index = 0;
boolean ok = true;

...

while (ok) { 
  response = mainHttp.execute(post);
  entity = response.getEntity();
  if (entity != null) {
    System.out.println("Enter " + curPage);
    s = EntityUtils.toString(entity);
    System.out.println("Exit " + curPage);
    index = s.indexOf("[" + curPage + "]");
    if (index > 0) {
      parseContent();
    } else {
      ok = false;
    }                
  }
}

在调试窗口中显示如下内容:

Enter 1
Exit 1
.
.
.
Enter n

我也在使用http请求分析器,我看到在卡住的页面上,数据没有被完全检索到(它没有到达</html>或页面末尾)。

在这种情况下,我该如何跳过或重试下载数据?谁能帮帮我?

谢谢!

LE:

实际设置为:

mainHttp.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(1, true));
mainHttp.getParams().setParameter("http.connection-manager.timeout", 15000);
mainHttp.getParams().setParameter("http.socket.timeout", 15000);
mainHttp.getParams().setParameter("http.connection.timeout", 15000);

其中15000 是以毫秒为单位的超时时间。

感谢您的帮助。

【问题讨论】:

    标签: java apache httpclient


    【解决方案1】:
    DefaultMethodRetryHandler retryhandler = new DefaultMethodRetryHandler(1, true);
    mainHttp.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryhandler);   
    

    来源:http://hc.apache.org/httpclient-3.x/tutorial.html方法恢复

    但这只是在发生任何异常时,请尝试在每次发出请求时检查 IOExceptions

    【讨论】:

    • 不。依然没有。我还添加了超时,但仍然没有任何反应。 :(
    • 但是你真的确定你从服务器得到每个页面的响应吗?
    • 是的,我 100% 确定。它下载 n-1 个页面,第 n 个页面停留在 xx%。
    • 好的。那么问题可能出在随后的请求中。如果您尝试使请求异步或在每个页面的线程中和 parseContent();函数按需执行,如果线程不工作,尝试异步任务。我有某种类似的问题,但在我的情况下,我的 HTTPClient 每次都死了,我做了类似线程客户端的事情。 ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, schemeRegistry);然后你只需设置参数和方案,让你的客户端像:client = new DefaultHttpClient(cm, params);
    • @IonutUngureanu 或更好地在这里查看:droidsnip.blogspot.com/2011/10/… 一些代码。希望对你有帮助
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2012-09-03
    相关资源
    最近更新 更多