Android OkHttp IOException unexpected end of stream异常处理方式

先说处理方式,http请求时添加以下header

header ("Connection":"close")

如果是使用Retrofit基类添加Header需要使用拦截器,代码如下:

val client = OkHttpClient.Builder()
                .addInterceptor {
                    val original = it.request()
                    val request = original.newBuilder()
                            .header("Connection":"close")
                            .method(original.method(), original.body())
                            .build()
                    it.proceed(request)
                }
                .build()
val retrofit = Retrofit.Builder().apply {
            baseUrl(baseUrl)
            client(client)
            addConverterFactory(GsonConverterFactory.create())
            addCallAdapterFactory(CoroutineCallAdapterFactory())
        }

处理方式来自OkHttp3 - IOException: unexpected end of stream on

issues中没说是为什么导致,但是header中是"Connection":"close",查阅了代码后推测是否因为客户端与服务端timeout不同或其他原因导致一方关闭连接后另一方认为还处在连接状态后导致,添加connection-close后明确处理完毕被close掉。

经查阅Connection-close解释

HTTP Connection的 close设置允许客户端或服务器中任何一方关闭底层的连接双方都会要求在处理请求后关闭它们的TCP连接。

看到这里之后决定同时在服务端的response中添加header ("Connection":"close")

在此之后暂未出现此异常

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容