调用我们的内部网络服务之一似乎会出现以下错误:
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();
请尝试以下可能的解决方案(我认为):
1-尝试使用retryOnConnectionFailure(true)
如下:
OkHttpClient client = new OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.build();
2-尝试添加:request.addHeader("Connection","close")
(大多数情况下,这是解决方案,尊重卡蒂克的答案。)
Request request = new Request.Builder()
.addHeader("Authorization", "Bearer " + apiToken)
.addHeader("content-type", "application/json")
.addHeader("Connection","close")
.url(uri)
.build();
3- 请增加服务器的响应时间(设置得尽可能长),然后重试。
另请参阅:OkHTTP Websocket:连接上的蒸汽意外终止 https://stackoverflow.com/questions/32161398/okhttp-websocket-unexpected-end-of-steam-on-connection
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)