我编写了一个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();
    }

#1楼 票数:4 已采纳

您是否每次都传递相同的HttpURLConnection对象? 如果是,则由于InputStream已绑定到基础HTTP连接,因此每次都会获得相同的InputStream而不是要考虑的新URL流。 在将新连接传递给此方法之前,请打开一个新连接(URL#openConnection),您应该一切顺利。

#2楼 票数:0

阅读完整个屏幕后,还有什么要阅读? 一条获取或发布消息不能导致服务器进行多次传输。 它发回一条消息,故事结束。

如果屏幕仍在更新,则(a)输入尚未完成,或者(b)进一步的更新不是HTML,例如与服务器通信的applet或Javascript函数等。

我认为BufferedReader.readLine会一直阻塞,只要仍有输入输入,所以我认为可能不是(a)。 如果情况是(b),则阅读更多HTML不会有帮助:这没有改变。

  ask by Viktor Dahl translate from so

未解决问题?本站智能推荐:

2回复

重用HttpURLConnection

在我的应用程序中,我使用以下代码下载几个图像。 是这样做的高性能还是我能以某种方式重用连接?
1回复

HttpURLConnection的getResponseMessage()方法返回什么?

我正在编写一个使用HttpURLConnection进行下载的Android应用程序。 我想知道getResponseMessage()方法返回什么。 如果我成功(200 OK)请求,它会返回与getInputStream()给出的数据相同的东西吗? 如果我的请求收到非200状态代码,它会
2回复

如何使用HttpURLConnection检查https

我正在尝试使用HttpUrlConnection连接到url。 用户输入的主机可以在http://或https://上运行。 当我连接时,它会抛出一个异常,如EOFException。 我有什么办法可以通过一些错误代码或某些方式来确定URL是否在https上运行? 以下代码我正用于此目
6回复

HttpURLConnection-“https://”与“http://”

例如,我正在尝试获取用户输入的网址的图标 我使用HttpUrlConnection从主机url的/favicon.ico扩展中获取favicon的位图。 但是,由于用户可能不会指定http://或https:// ,因此我必须自己添加它。 我遇到的问题是,如果我在http://前添加h
1回复

将CONNECT与HttpURLCONnection结合使用

当我连接到服务器时,我试图获取服务器发送的数据,HttpURLConnection con = (HttpURLConnection) new URL("http://myurl.com:443").openConnection();con.setRequestMethod("CONNECT");B
1回复

HttpUrlConnection冻结了我的AsyncTask

在AsyncTask的“ doInBackground”函数中,我获得了以下代码: 凭据确定后,一切正常,ResponseCode为200。但是,如果我输入了错误的凭据,则getResponseCode()会使AsyncTask无限期地等待答案(超时将不起作用)。 查看HttpUrlCon
1回复

HttpURLConnection并下载大文件

我使用HttpURLConnection从URL下载文件。 该代码可用于下载小型文件(即25 KB)。 我没有尝试下载大文件(大约100 MB),因为来自特定URL的文件总是很小。 我想知道使用此代码下载较大的文件会发生什么:它将继续工作还是会引发异常? 我是否需要为更大的文件实现代
2回复

HttpURLConnection发布Android

我试图使用教程这里用我学到的数据在这里进行HttpURLConnection的POST请求。 每次我运行它时,响应都会显示错误消息:“您必须输入用户名!” 和“您必须输入密码”。 谁能解释一下为什么服务器无法识别甚至无法获取发布的数据? 这是我的代码: