Java 如何重复读取HttpURLConnection?
我编写了一个Java程序,它可以从网页上抓取一些内容。它通过每隔几秒钟调用Java 如何重复读取HttpURLConnection?,java,http,web-scraping,httpurlconnection,Java,Http,Web Scraping,Httpurlconnection,我编写了一个Java程序,它可以从网页上抓取一些内容。它通过每隔几秒钟调用readWebPage方法来检索内容。我遇到的问题是,只有第一次阅读才有效。第一次阅读网页后,InputStream总是显示为空(in.ready()returnfalse) 此外,conn.getContentLength()每次返回相同的值,即使页面上的内容已更改。如果我重新启动程序,新内容将被正确获取 我错过了什么?我必须对conn对象执行某种刷新吗 private String readWebpage(HttpUR
readWebPage
方法来检索内容。我遇到的问题是,只有第一次阅读才有效。第一次阅读网页后,InputStream
总是显示为空(in.ready()
returnfalse
)
此外,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();
}
您是否每次都传入相同的
HttpURLConnection
对象?如果是,那么由于InputStream
绑定到底层HTTP连接,因此每次都会得到相同的InputStream
,而不是考虑到URL的新流。在将新连接(URL#openConnection)传递给此方法之前,请先打开一个新连接(URL#openConnection),这样您就可以开始了。您是否每次都传递相同的HttpURLConnection
对象?如果是,那么由于InputStream
绑定到底层HTTP连接,因此每次都会得到相同的InputStream
,而不是考虑到URL的新流。在将新连接(URL#openConnection)传递给此方法之前,请先打开一个新连接(URL#openConnection),这样您就可以开始了。阅读完整个屏幕后,还有什么需要阅读的?一条get或post消息不能导致来自服务器的多个传输。它会发回一条信息,故事结束了
如果屏幕仍在更新,那么要么(a)输入未完成,要么(b)进一步的更新不是HTML,比如有一个小程序或一个Javascript函数正在与服务器通信,或者类似的东西
我认为只要还有输入,BufferedReader.readLine就会阻塞,所以我认为它不可能是(a)。如果情况是(b),阅读更多的HTML不会有帮助:这不会改变。阅读完整个屏幕后,还有什么需要阅读的?一条get或post消息不能导致来自服务器的多个传输。它会发回一条信息,故事结束了 如果屏幕仍在更新,那么要么(a)输入未完成,要么(b)进一步的更新不是HTML,比如有一个小程序或一个Javascript函数正在与服务器通信,或者类似的东西
我认为只要还有输入,BufferedReader.readLine就会阻塞,所以我认为它不可能是(a)。如果情况是(b),阅读更多的HTML不会有帮助:这不会改变。完成后是否总是关闭Http连接?我尝试过在完成后调用
conn.disconnect()
,但这似乎没有什么不同。完成后是否总是关闭Http连接?我尝试过在完成后调用conn.disconnect()
,但似乎没有什么不同。