【问题标题】:Incomplete content (buffer) of webpage网页内容(缓冲区)不完整
【发布时间】:2012-03-08 11:50:12
【问题描述】:

我想用以下方法读取网页的内容,但我只能读到 60-70% 的内容。

我尝试了 2 种不同的方法来阅读网页,结果都一样。我也尝试了不同的网址。我没有收到错误或超时。

我做错了什么?

        URL url = new URL(uri.toString());
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try
    {
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = br.readLine()) != null) 
        {
            sb.append(line + "\n");
        }
        br.close();

        this.content = sb.toString();
    }      
    finally
    {
        urlConnection.disconnect();
    }

    HttpGet get = new HttpGet(uri);
    HttpClient defaultHttp = new DefaultHttpClient(httpParameters);
    HttpResponse response = defaultHttp.execute(get);

    StatusLine status = response.getStatusLine();
    if(status.getStatusCode() == HttpStatus.SC_OK)
    {
        HttpEntity entity = response.getEntity();
        InputStream stream = entity.getContent();
            String encoding = "utf-8";      

        //long length = entity.getContentLength();
        //if(entity.getContentEncoding() != null)
        //{
        //  encoding = entity.getContentEncoding().getValue();
        //}
        //if(length > 0)
        //{
            byte[] buffer = new byte[1024];
            long read = 0;
            do
            {
                read = stream.read(buffer);
                if(read > 0)
                {
                    this.content += new String(buffer, encoding);
                }
            }while(read > 0);

        //}
    }

@编辑

我已经用 C# 和 WinForms 进行了尝试。我阅读了该网页的完整 html 源代码。 使用 java-android 它不起作用。

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.kicker.de");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        string content = reader.ReadToEnd();


        reader.Close();
        response.Close();

【问题讨论】:

  • 乍看之下没有任何问题。可以发网址吗?
  • 我尝试了很多网址,但每次都得到相同的结果。如果一个网站的来源不是很小,我没有得到完整的来源。
  • 好的,你能发布一个不适合你的网址吗?
  • 好的,例如。 kicker.de(大来源)或具有较小来源的提要:rss.kicker.de/news/aktuell
  • 刚刚针对 kicker.de 测试了您的第一个代码,我收到了完整的内容。您是否在 Android 平台之外尝试过您的代码?

标签: java android web webpage http-get


【解决方案1】:

apache 的 util jar 中的 httpurlconnection 限制了响应中的最大字节,我不记得它的数量了。

但是在大​​多数情况下,可能你在UI线程中使用http连接,所以有时它不安全,可能会被杀死,你可以选择在一个线程中处理http请求而不是在UI线程中处理。所以我想知道你是否在UT线程中这样做

【讨论】:

  • 我已经在 UI 线程和另一个“新”线程中尝试过。每次我获得相同的结果。我没有得到完整的源代码...
  • 所以你可能会认为如果你使用错误的方式读取字节,读取字节的方式不止一种,你可以尝试其他方式读取,希望你会成功
【解决方案2】:

我目前有同样的问题。我在一个简单的 Java 应用程序中尝试了我的代码,我收到了全部内容。但在 Android 上,内容是不完整的。这个问题现在已经一岁了。我想你在此期间已经解决了它。您能添加您的解决方案吗?

编辑: 我将内容写入我的 Android 设备上的文件中。内容已完成! 似乎 logcat 没有显示您从 Devie 收到的完整输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多