2016-07-06 14 views
0

私の会社の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に設定しようとしましたが、次のリクエストは常に失敗しました。

私のオプションは何ですか?

+0

その後、上記の304の応答が正しくないか、ライブラリが正しく処理していません。トレースがありますか? –

答えて

0

ウェブサーバーがHTTP 304応答で応答データを間違って返しています。それを修正してください。

それを待つ間、すべてのHTTP 304の応答ヘッダーにConnection: closeヘッダーを追加するOkHttp network interceptorを使用して回避策を講じることができます。

関連する問題