У меня есть приложение Android, которое отправляет http запросы к REST API в Flask. Я использую Retrofit2 с okhttp3 для отправки запросов на сервер, размещенный на Raspberry Pi с Raspbian Lite. Моя проблема в том, что иногда я получаю IOException -> java. net .ProtocolException: неожиданный конец потока Но это иногда случается, в других случаях это работает отлично. Http-клиент построен следующим образом:
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
httpClient.addInterceptor(new Interceptor() {
@NotNull
@Override
public Response intercept(@NotNull Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.header("User-Agent","myUserAgent")
.header("Connection","close")
.addHeader("Accept-Encoding", "identity")
.method(original.method(),original.body())
.build();
return chain.proceed(request);
}
});
Retrofit retrofit=null;
try {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient.build())
.build();
}catch (Exception e){
//Log.d
}
ApiService API_SERVICE=null;
try{
API_SERVICE = retrofit.create(ApiService.class);
}catch (Exception e){
//Log.d
}
return API_SERVICE;
Я пробовал с и без регистрации перехватчиков, с Accept-Encoding: identity и Conecction: close. Но это не работает. Длина ответа составляет 4339 (это указывает почтальон), а в перехватчике также указано 4339 Это исключение, которое я получаю:
Я использую Android Studio с эмулятором в Android API 28. И мой p c и Rasberry подключены кабелем ethe rnet к Inte rnet. Чего я не понимаю, так это то, что иногда запрос работает, а иногда - прямо на OnFailure. На сервере я всегда получаю 200 кодов. Запрос обрабатывается и правильно возвращает ответ. что еще я могу попробовать?