Источник веб-страницы не полностью прочитан HTTPClient

Я могу загружать меньшие ответы JSON со следующим кодом:

    public String getHTTPData() {

        HttpURLConnection httpURLConnection = null;

        InputStream inputStream = null;

        try {

            httpURLConnection = (HttpURLConnection) (new URL(BASE_URL)).openConnection();
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.setDoInput(true);
            httpURLConnection.connect();

            StringBuffer stringBuffer = new StringBuffer();
            inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = null;

            while ((line = bufferedReader.readLine()) != null) {

                stringBuffer.append(line + "\n");
            }

            inputStream.close();

            httpURLConnection.disconnect();

        } catch (Throwable t) {

            t.printStackTrace();

        } finally {

            try {

                inputStream.close();

                httpURLConnection.disconnect();

            } catch (Throwable t) {

                t.printStackTrace();
            }
        }

        return null;
    }

но когда я не смог найти определенный API (API китайского словаря), я подумал, что мог бы также проанализировать исходный код HTML для получения данных, которые мне нужны. Но я, кажется, получаю только первые 100 строк исходного кода. Должно быть, мне не хватает чего-то очень простого, например HTTP-параметра maxLength или тайм-аута. Ничего не нашел в SO, также попробовал код, предложенный Google здесь и столкнулся с той же проблемой. Я не уверен, как дальше это отлаживать, я вижу, что поток ввода высыхает и возвращает «-1» (пробовал разные фрагменты maxLength в «readStream» и получил блоки меньшего размера, но в конце все равно иссяк), поэтому я предполагаю, что это URLConnection не доставляется. Или, может быть, мой код входного потока неисправен? Кстати, это URL-адрес https, но, поскольку я получаю некоторые исходные данные, я не думаю, что это проблема протокола (надеюсь, я обобщил это несколько разумно...)


person Mairyu    schedule 01.04.2017    source источник
comment
любые предложения о том, как отладить это?   -  person Mairyu    schedule 16.04.2017
comment
ОМГ, я такой тупой, наконец-то понял. Я получил всю страницу все время, но я использовал «Log.i», чтобы посмотреть ответ, и, по-видимому, само ведение журнала усекается после 200 символов или около того. (наконец-то использовал TextView, чтобы проверить это), вероятно, отладчик тоже бы это хорошо уловил, d'oh   -  person Mairyu    schedule 03.05.2017


Ответы (1)


Рекомендуется запускать код в потоке, а не в основном потоке. Также, пожалуйста, добавьте это к вашему запросу:

httpURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
httpURLConnection.setRequestProperty("Accept-Charset", "UTF-8");
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);

Затем проверьте код ответа:

if (responseCode == HttpURLConnection.HTTP_OK) {
}

Не забудьте добавить разрешение Интернета в файл манифеста:

<uses-permission android:name="android.permission.INTERNET" /> 
person RonTLV    schedule 03.04.2017
comment
спасибо за отзыв, да, у меня была строка манифеста, и я проверил ответ (это 200, т.е. все в порядке). Как я уже сказал, я получаю куски данных, когда я ограничиваю их до 100000, я получаю следующее: 100000 + 100000 + 5308, т.е. я получаю 3 буфера и остаток. Я также получаю полный исходный код страницы через curl. - person Mairyu; 03.04.2017