Android HTTPS con.getResponseCode () генерирует исключение EndOfFile для readUtf8LineStrict в больших запросах

1

ПРОБЛЕМА

У меня есть почтовый запрос, который вызывает ошибку только тогда, когда данные для восстановления длинны (около 60 Мб данных в формате json).

Тот же запрос с меньшей информацией не вызывает ошибок и отлично работает.

Сообщение об ошибке, которое всегда отображается ровно за 2 минуты, сделало запрос, следующее:

java.io.EOFException
at com.android.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:98)
at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:202)
at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:119)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:798)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:405)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:349)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:517)
at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:25)
at com.myproject.mypackage.DataManagerService$ServiceHandler.sincronitzar_baixada_dades(DataManagerService.java:1406)
at com.myproject.mypackage.DataManagerService$ServiceHandler.handleMessage(DataManagerService.java:403)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.os.HandlerThread.run(HandlerThread.java:61)

На стороне сервера мы обнаружили, что служба готовит данные, все еще живые, после возникновения ошибки на моем устройстве.

Несколько дней назад мы увеличили ОЗУ на сервере, чтобы избежать ошибок OOM в той же казуистике.

ДОПОЛНИТЕЛЬНЫЙ КОДЕКС 03/06/2016

также добавлен код, который делает запрос и сохраняет ответ в файле на устройстве:

Код запроса:

HttpsURLConnection con = (HttpsURLConnection) Https_url.openConnection();
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1){
                con.setRequestProperty("Connection", "close");
            }
            con.setReadTimeout(DEFAULT_RESPONSE_TIMEOUT);
            con.setConnectTimeout(DEFAULT_RESPONSE_TIMEOUT);
            con.setRequestMethod("POST");
            con.setRequestProperty("Accept-Encoding","identity");
            con.setDoInput(true);
            con.setDoOutput(true);
            con.connect();
            int status = con.getResponseCode(); 
            if (status >= 400) {
                inputStreamPujada = con.getErrorStream();
            }
            else{
                inputStreamPujada = con.getInputStream();
            }

            if (inputStreamPujada != null){
                try {
                    OutputStream out = new FileOutputStream(file);
                    byte[] buf = new byte[1024];
                    int len;
                    while((len=in.read(buf))>0){ <--// THIS LINE IS THROWING EOFExceptiono error!
                        out.write(buf,0,len);
                    }
                    out.close();
                    in.close();
                }
                catch (Exception e) { e.printStackTrace(); }
            }

ЧТО МЫ ПОПРОСИЛИ?

  • Мы пытались форматировать json-выходы без разделительных линий, а также с симпатичным json-форматом.
  • Похоже, что ошибка вызвана тем, что DataStream не обнаружил "\n" и выбрасывает исключение EndOfFile
  • Также попытался поднять RAM памяти на стороне сервера без эффекта.
  • Также попробовал отредактировать свойство запроса "Accept-Encoding" как этот вопрос

ВОПРОС

В чем причина этого исключения EOF? Почему работает с низкими данными и бросает это в большие данные? Есть ли какой-либо промежуток времени ожидания или ограничение библиотеки с максимальным временем за 2 минуты?

Спасибо заранее!

Теги:
request
response

1 ответ

0
Лучший ответ

После долгих исследований мы модифицируем серверную сторону, чтобы отправить объем данных в выгружаемую систему из 5000 записей для каждого флеша файла JSON.

Кажется, что сервер был заблокирован путем адресации данных, и это сделало запрос завершен исключением EOFException, как показано в вопросе.

Я надеюсь, что этот вопрос когда-нибудь будет полезен кому-то еще. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню