如何重复读取HttpURLConnection?

时间:2011-03-11 20:59:33

标签: java http web-scraping httpurlconnection

我编写了一个Java程序,用于从网页中删除一些内容。它通过每隔几秒调用readWebPage方法来检索内容。我遇到的问题是只有第一次读取才有效。在我第一次阅读网页后,InputStream似乎总是空的(in.ready()返回false)。

此外,conn.getContentLength()每次都返回相同的值,即使页面上的内容已更改。如果我重新启动程序,则会正确获取新内容。

我错过了什么?我是否必须对conn对象执行某种刷新?

private String readWebpage(HttpURLConnection conn) throws IOException{
            conn.connect();
            InputStreamReader in = new InputStreamReader((InputStream) conn.getContent());
            BufferedReader buffer = new BufferedReader(in);
            StringBuilder b = new StringBuilder(conn.getContentLength()+5);
            String line;
            while ((line=buffer.readLine())!=null){
                b.append(line);
            }
            in.close();
            buffer.close();
            return b.toString();
    }

2 个答案:

答案 0 :(得分:4)

您每次都传递相同的HttpURLConnection对象吗?如果是,那么由于InputStream与基础HTTP连接相关联,因此每次都会获得相同的InputStream,而不是考虑到URL的新流。在将它传递给这个方法之前打开一个新的连接(URL#openConnection),你应该好好去。

答案 1 :(得分:0)

一旦你阅读了整个屏幕,还有什么可以阅读?单个get或post消息不能导致来自服务器的多次传输。它发送一条消息,故事结束。

如果屏幕仍在更新,则(a)输入未完成,或者(b)进一步更新不是HTML,例如有一个applet或Javascript函数正在与服务器或某些人交谈

我认为BufferedReader.readLine只要还有输入就会阻塞,所以我不认为它可能是(a)。如果情况是(b),那么阅读更多的HTML并没有帮助:那不会改变。

相关问题