web-dev-qa-db-ja.com

java.io.IOException:接続のストリームの予期しない終了?

社内Webサービスの1つを呼び出すと、次のエラーが発生するようです。

Java.io.IOException: unexpected end of stream on Connection{webservicessandbox.xxx.com:443, proxy=DIRECT@ hostAddress=174.143.185.13 cipherSuite=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA protocol=http/1.1} (recycle count=0)

私が他の場所で見たことから、これはサーバーの問題として指摘されていますが、ブラウザまたはIOSでWSが呼び出されているとき、この問題は見られません。 OkHTTPと手動のHTTPUrlConnection実装の両方を使用しましたが、違いはないようです。誰にもアイデアはありますか?

OKHttp:
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .addHeader("Authorization", "Bearer " + apiToken)
                    .addHeader("content-type", "application/json")
                    .url(uri)
                    .build();
HTTPURLConnection:
            URL myURL = new URL(uri);
            HttpsURLConnection myConnection = (HttpsURLConnection) myURL.openConnection();
            myConnection.setConnectTimeout(TIMEOUT_MILLISEC);
            myConnection.setDoOutput(false);
            myConnection.setRequestMethod("GET");
            myConnection.setRequestProperty("Authorization", "Bearer " + apiToken);
            myConnection.setRequestProperty("content-type", "application/json");
            int respCode = myConnection.getResponseCode();
6
Benjamin S

以下の可能性のある解決策を試してください(私の意見では):

1-以下のようにretryOnConnectionFailure(true)を使用してみてください。

_OkHttpClient client = new OkHttpClient.Builder()
    .retryOnConnectionFailure(true)
    .build();
_

2-追加してみてください:request.addHeader("Connection","close")(ほとんどの場合、これはKartikの回答を考慮した解決策です。)

_Request request = new Request.Builder()
                    .addHeader("Authorization", "Bearer " + apiToken)
                    .addHeader("content-type", "application/json")
                    .addHeader("Connection","close")
                    .url(uri)
                    .build();
_

3-サーバーの応答時間を増やして(できるだけ長く設定して)再試行してください。

次も参照してください: OkHTTP Websocket:接続時のSteamの予期しない終了

2
Eray Balkanli

このエラーTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384はサーバーに関連しています。考えられる理由は、サーバーがシャットダウンしている可能性があります。

0
aanshu

クライアントとサーバーの両方が終了したら、接続を閉じる必要があります。

OkHttpリクエストビルダーで、次の行を追加します:.header("Connection", "close")

また、ブラウザインスペクタのネットワークタブをチェックして、ブラウザが送信しているヘッダーを確認します。コード内のこれらのヘッダーを一致させると、動作するはずです。

0
Kartik