我將我們的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響應格式不正確,或者您的庫不正確地處理它。你有蹤跡嗎? –