java.io.IOException:连接上出现意外的流结束?
调用我们的一个内部web服务似乎会出现以下错误:java.io.IOException:连接上出现意外的流结束?,java,android,httpurlconnection,okhttp,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) 从我在其他地方
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();
此错误
TLS\u ECDHE\u RSA\u和\u AES\u 256\u GCM\u SHA384
与服务器有关。可能的原因是服务器已关闭。客户端和服务器都需要在连接完成后关闭连接
在OkHttp请求生成器中,添加以下行:.header(“连接”、“关闭”)
同时检查浏览器检查器的“网络”选项卡,查看浏览器正在发送哪些标题。匹配代码中的这些标题,它应该会起作用。请尝试以下可能的解决方案(在我看来): 1-尝试使用
retryOnConnectionFailure(true)
如下:
OkHttpClient client = new OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.build();
2-尝试添加:request.addHeader(“连接”、“关闭”)
(根据Kartik的回答,大多数情况下这是解决方案。)
3-请增加服务器的响应时间(将其设置为尽可能高),然后重试
另请参见:您是否使用某种代理?远程服务器是否需要双向ssl(请求客户端证书)?据我所知,这可能是一个仅适用于我的Android仿真的问题。当我关闭仿真并转到物理设备上时,我似乎不再有发生此错误的问题。我仍然不明白为什么以前我可以很好地使用仿真器时,这会停止工作。在某个时刻,模拟器的更新可能会出现问题?感谢您的响应,但不,我能够使用其他设备一致地调用服务。这是设备规格9吗?这不是错误,这是TLS密码套件。
Request request = new Request.Builder()
.addHeader("Authorization", "Bearer " + apiToken)
.addHeader("content-type", "application/json")
.addHeader("Connection","close")
.url(uri)
.build();