我将我们的HTTP库从Apache转换到我公司的Android应用程序中的OkHttp3。java.net.ProtocolException:意外的状态行:{} HTTP/1.1 422不可处理的实体
的okHttp客户端设置以下方式:
mDefaultClient = new OkHttpClient.Builder()
.readTimeout(getSocketTimeOut(), TimeUnit.MILLISECONDS)
.writeTimeout(getSocketTimeOut(), TimeUnit.MILLISECONDS)
.connectTimeout(getSocketTimeOut(), TimeUnit.MILLISECONDS)
.followRedirects(true)
.connectionPool(new ConnectionPool(MAX_TOTAL_CONNECTION, 5, TimeUnit.MINUTES))
.addNetworkInterceptor(new StethoInterceptor())
.followSslRedirects(true)
.build();
当连接设置为保持活动(默认设置),一些请求失败,出现以下Java异常:
java.net.ProtocolException: Unexpected status line: {}HTTP/1.1 422 Unprocessable Entity
java.net.ProtocolException: Unexpected status line: {}HTTP/1.1 200 OK
这些请求总是失败,出现此异常,如果该请求恰好在它返回304未修改响应与一个空的正文。
没有这304响应,这些请求被成功处理。
我已经阅读无处不在,解决方案是将连接关闭标头添加到请求。
但是,我不想这样做。我们想要使用的连接池几乎是无用的。
保持连接正常运行对我们来说是一种好处,我们希望保持与OkHttp相同的优势。
服务器似乎没有发送错误响应,通过发送邮递员请求到服务器进行验证,这不会失败。另外,我们以前的Apache客户端正确处理了这些请求。
添加拦截器(网络或其他)似乎不起作用。我尝试填充正文或为304请求设置'Content-Length'为0,但下一个请求总是失败。
我有什么选择?
然后,前面的304响应格式不正确,或者您的库不正确地处理它。你有踪迹吗? –