我编写了一个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();
}
答案 0 :(得分:4)
您每次都传递相同的HttpURLConnection
对象吗?如果是,那么由于InputStream
与基础HTTP连接相关联,因此每次都会获得相同的InputStream
,而不是考虑到URL的新流。在将它传递给这个方法之前打开一个新的连接(URL#openConnection),你应该好好去。
答案 1 :(得分:0)
一旦你阅读了整个屏幕,还有什么可以阅读?单个get或post消息不能导致来自服务器的多次传输。它发送一条消息,故事结束。
如果屏幕仍在更新,则(a)输入未完成,或者(b)进一步更新不是HTML,例如有一个applet或Javascript函数正在与服务器或某些人交谈
我认为BufferedReader.readLine只要还有输入就会阻塞,所以我不认为它可能是(a)。如果情况是(b),那么阅读更多的HTML并没有帮助:那不会改变。