私の会社のAndroidアプリでHTTPライブラリをApacheからOkHttp3に切り替えました。java.net.ProtocolException:予期しないステータス行:{} HTTP/1.1 422 Unprocessable Entity
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 Not Modified応答が空の本文で返される直前の要求の場合、これらの要求は常にこの例外で失敗します。
この304応答がない場合、これらの要求は正常に処理されます。
私は解決策がConnection Closedヘッダーを要求に追加することをどこでも読んでいます。
しかし、私はそれをしたくありません。使用したいコネクション・プールは、ほとんど役に立ちません。
接続を有効にしておくことは、私たちがApacheで得たメリットです。OkHttpと同じ利点を維持したいと考えています。
サーバーは、失敗しないサーバーにPostman要求を送信することによって、検証されたフォールト応答を送信しているようではありません。また、以前のApacheクライアントはこれらの要求を正しく処理しました。
インターセプタ(ネットワークなど)を追加しても動作しないようです。私は、ボディに値を設定しようとしたか、または304のリクエストに対して 'Content-Length'を0に設定しようとしましたが、次のリクエストは常に失敗しました。
私のオプションは何ですか?
その後、上記の304の応答が正しくないか、ライブラリが正しく処理していません。トレースがありますか? –