我有网络服务网址,工作正常。它提供了JSON数据。当我使用HttpURLConnection
,InputStream
时,我收到了错误消息。喜欢
java.io.IOException:意外的流结束 连接{comenius-api.sabacloud.com:443,proxy = DIRECT hostAddress = 12.130.57.1 cipherSuite = TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 protocol = http / 1.1} (回收计数= 0)
try{
URL url = new URL("https://comenius-api.sabacloud.com/v1/people/username="+username+":(internalWorkHistory)?type=internal&SabaCertificate="+ certificate);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
InputStream ist = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(ist));
while((singleLine = reader.readLine())!= null){
data = data + singleLine;
Log.e("Response", data);
}
}catch(Exception e)
{
e.printStackTrace();
}
如何解决这个问题?
答案 0 :(得分:12)
使用OKHttp3
时遇到相同的问题。问题是我没有为每个请求关闭连接,而对于客户端,相同的连接可用,而对于服务器却没有,因此服务器返回错误。
该解决方案指示完成后关闭连接的每个请求。您必须在标题中添加一个标志来表明这一点。在OKHttp3
中是这样的:
Request request = new Request.Builder()
.url(URL)
.header("Connection", "close")
...
答案 1 :(得分:6)
我今天遇到了这个问题。事实证明,这是服务器故障,因为服务器抛出错误并在解析请求时关闭。
检查您的后端,如果不是您的后端,请通知该服务器的所有者
答案 2 :(得分:1)
我遇到了同样的问题,原来我仍然在模拟器上配置了代理,而不再打开Charles
答案 3 :(得分:0)
刚刚找到解决方案
它实际上是一个服务器端问题和解决方案是发送内容长度标题
如果你使用PHP只是让你的代码像这样
hive -e "$(cat file1.hql file2.hql)"
这里使用的技巧是使用输出缓冲区
发送内容长度标头答案 4 :(得分:0)
我正在使用XAMPP使用localhost测试我的应用程序并且发生了此错误,问题是我使用443端口使用Skype的端口我只是退出了skype并且错误已解决!
答案 5 :(得分:0)
这可能是一个旧线程,对于我来说,请检查您的互联网连接(Wifi),访问某些端点可能受到一些限制。
我已经通过使用/连接到我的移动数据来修复我的问题。
欢呼/快乐的编码
答案 6 :(得分:0)
“ Keepalive使客户端很难确定一个响应在哪里结束,下一个响应在哪里开始” 1
问题似乎是在2种情况下重用活动连接时发生冲突导致的:
服务器未在响应标头中发送 Content-Length
(流内容情况,因此不能使用Content-Length)服务器不使用分块传输编码
因此,如果您观察到异常,请嗅探http标头(例如,在Android Studio Profiler工具中)。如果您会在响应标头中看到这两者
没有
然后是上述情况。
由于完全是服务器问题,因此解决方案应该是计算 Content-Length ,并将其放入服务器端的响应标头(如果可能)(或使用Chunked传输编码)。
建议在客户端关闭连接只是一种变通方法,请记住这会降低整体性能。
答案 7 :(得分:0)
它是服务器错误。这意味着执行将以某种方式返回到您的客户端,而无需服务器发送实际的响应头。
如果您可以控制服务器代码,请检查在处理请求后是否显式发送带有响应代码的响应头。这样,改造就能知道请求已得到处理。
答案 8 :(得分:0)
我有同样的问题。此错误是由服务器端仅支持http2引起的。您需要将JDK更新到支持http2(> = jdk9)的版本才能解决此问题。
答案 9 :(得分:0)
考虑使用 OkHttp 的 retryOnConnectionFailure
配置参数 – as documented,这使客户端能够静默恢复:
过时的池连接。ConnectionPool
重用套接字以减少请求延迟,但这些连接偶尔会超时。
如果您使用的是 ktor 客户端(阅读:kotlin multiplatform),另请参阅:https://youtrack.jetbrains.com/issue/KTOR-449#focus=Comments-27-4271320.0-0
答案 10 :(得分:-1)
最有可能在同一时间发生两件事。
首先,URL包含一个不常用的端口,其次,您正在使用不支持该端口的VPN或代理。
我个人也遇到同样的问题。我的服务器端口为45860,当时我使用的是pSiphon反过滤器VPN。
在这种情况下,只有当服务器的relpy是状态代码大于0的错误时,我的邮递员才报告“连接挂断”。(当从服务器返回一些文本且没有错误代码时,这是很好的选择)
然后我将服务器上的Web服务端口更改为8080,WOW起作用了!尽管已连接psiphon vpn。
因此,我的建议是,如果可以更改服务器端口,请尝试使用它,或者检查是否存在代理问题