我有一个Android应用程序,它向Flask中的REST API发出http请求。我使用Retrofit2和okhttp3向运行在安装了Raspbian Lite的树莓派上的服务器发送请求。我的问题是有时会收到IOException -> java.net.ProtocolException:意外的流结束。但这种情况有时发生,其他时候它可以完美地工作。http客户端的构建如下:
我已经尝试过使用日志拦截器和不使用日志拦截器,使用Accept-Encoding: identity和Conecction: close。但是它不起作用。 答案的Content-Lenght为4339(由Postman指示),在拦截器中也指示为4339。 这是我得到的异常: 我正在使用Android Studio和Android API 28中的模拟器。我的电脑和树莓派都通过以太网连接到互联网。 我不明白的是,为什么有时请求会成功,而有时却直接进入onFailure状态。 在服务器上,我总是得到一个200代码。请求已经被处理并返回了正确的响应。 还可以尝试什么?
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。但是它不起作用。 答案的Content-Lenght为4339(由Postman指示),在拦截器中也指示为4339。 这是我得到的异常: 我正在使用Android Studio和Android API 28中的模拟器。我的电脑和树莓派都通过以太网连接到互联网。 我不明白的是,为什么有时请求会成功,而有时却直接进入onFailure状态。 在服务器上,我总是得到一个200代码。请求已经被处理并返回了正确的响应。 还可以尝试什么?