【问题标题】:Apache-HttpComponents: socket closed errorApache-HttpComponents:套接字关闭错误
【发布时间】:2013-05-23 18:54:59
【问题描述】:

我正在编写一个使用 Apache-HttpComponents 加载页面并将其 HTML 打印到控制台的 Java 程序;但是,该程序在抛出此错误之前仅打印部分 HTML:Exception in thread "main" java.net.SocketException: socket closed. 每次运行程序时,异常之前显示的 HTML 部分完全相同,并且该错误发生在 Google、Yahoo 的这个简化示例中和 Craigslist:

String USERAGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22";
DefaultHttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("http://www.craigslist.org");
get.setHeader(HTTP.USER_AGENT,USERAGENT);
HttpResponse page = client.execute(get);
get.releaseConnection();
InputStream stream = page.getEntity().getContent();
try{
    BufferedReader br = new BufferedReader(new InputStreamReader(stream));
    String line = "";
    while ((line = br.readLine()) != null){
        System.out.println(line);
    }
}
finally{
    EntityUtils.consume(page.getEntity());
}

【问题讨论】:

    标签: java apache-httpcomponents


    【解决方案1】:

    我发现在我阅读完 HTML 之前不应调用 get.releaseConnection();。在EntityUtils.consume(page.getEntity()); 修复上述代码后立即调用它。

    【讨论】:

    • 当然不应该。释放连接然后尝试从中读取数据从来没有意义。过于本地化。
    • 在我之前编写的一个脚本中,在调用 releaseConnection() 后连接实际关闭的延迟足够长,以至于我在调用它之后实际上能够读取整个(尽管很小)HTML 文件.这就是诱使我认为实体将其内容保存在本地的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2014-08-28
    • 2013-09-22
    • 1970-01-01
    相关资源
    最近更新 更多