java.io.IOException:连接上的流意外结束?

时间:2018-10-09 18:03:39

标签: java android httpurlconnection okhttp

调用我们的内部Web服务之一似乎出现以下错误:

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();

3 个答案:

答案 0 :(得分:1)

此错误TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384与服务器有关。可能的原因是服务器已关闭。

答案 1 :(得分:0)

客户端和服务器在完成连接后都需要关闭连接。

在您的OkHttp请求构建器中,添加以下行:.header("Connection", "close")

还要检查浏览器检查器的“网络”选项卡,以查看浏览器正在发送哪些标头。在代码中匹配这些标头,它应该可以工作。

答案 2 :(得分:0)

请尝试以下可能的解决方案(我认为):

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: Unexpected end of steam on Connection