Неполный контент (буфер) веб-страницы - PullRequest
1 голос
/ 08 марта 2012

Я хочу прочитать содержимое веб-страницы следующими способами, но я получаю только 60-70 процентов от него.

Я пробовал 2 разных способа чтения веб-страницы, оба с одинаковымрезультат.Я также пробовал разные URL.Я не получаю ошибок или тайм-аутов.

Что я делаю не так?

        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);

        //}
    }

@ edit

Я пробовалэто с 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();

Ответы [ 2 ]

0 голосов
/ 10 мая 2013

У меня сейчас такая же проблема. Я попробовал свой код в простом приложении Java, и я получил весь контент. Но на Android Контент неполный. Этому Вопросу сейчас год. Я думаю, что вы решили это в то же время. Можете ли вы добавить свое решение?

Редактировать : Я записал содержимое в файл на моем устройстве Android. Содержание было завершено! Кажется, что logcat не показывает полный вывод, который вы получаете от Devie.

0 голосов
/ 08 марта 2012

httpurlconnection в утилите jar apache ограничил самые большие байты в ответе, я не мог вспомнить их количество.

Но в большинстве случаев вы можете использовать http-conncetion в потоке пользовательского интерфейса, поэтому иногда это небезопасно и, возможно, будет уничтожено, вы можете выбрать обработку HTTP-запроса в потоке, но не в потоке пользовательского интерфейса. Поэтому я хочу знать, если вы делаете это в ветке UT

...