今天使用okhttpclient向设备上发信息,错误提示:
java.io.IOException: unexpected end of stream
原因是对方没有正确处理header中的Connection字段所致,经过whistle抓包后发现:Connection = keepalive,但对方没有处理这个值,默认是关闭链接,而客户端还是根据这个值去发起请求。
处理办法:使用Connection = close传输值。
private static class NetInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request().newBuilder().removeHeader("Connection").addHeader("Connection","close").build();
return chain.proceed(request);
}
}
在初始化代码中加入:
mHttpClient = builder.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
.addNetworkInterceptor(new NetInterceptor())
经过测试后发现,问题得到解决,不再出现:java.io.IOException: unexpected end of stream 的错误。