Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpURLConnection:What';阅读整个回复是怎么回事?_Java_Android_Httpurlconnection - Fatal编程技术网

Java HttpURLConnection:What';阅读整个回复是怎么回事?

Java HttpURLConnection:What';阅读整个回复是怎么回事?,java,android,httpurlconnection,Java,Android,Httpurlconnection,我目前的问题与我的非常相似 我有一个downloadFile(URL)函数,它创建一个新的HttpURLConnection,打开它,读取它,返回结果。当我在同一个URL上多次调用该函数时,第二次调用该函数几乎总是返回一个响应代码-1(但不会引发异常!!!) 这是非常有帮助的,但有几件事我正在努力理解 因此,如果将http.keepAlive设置为false解决了问题,那么它将指明具体内容?服务器是否以违反http协议的方式响应?或者更可能的是,我的代码在某种程度上违反了协议?追踪会告诉我什么?

我目前的问题与我的非常相似

我有一个
downloadFile(URL)
函数,它创建一个新的HttpURLConnection,打开它,读取它,返回结果。当我在同一个URL上多次调用该函数时,第二次调用该函数几乎总是返回一个响应代码-1(但不会引发异常!!!)

这是非常有帮助的,但有几件事我正在努力理解

因此,如果将http.keepAlive设置为false解决了问题,那么它将指明具体内容?服务器是否以违反http协议的方式响应?或者更可能的是,我的代码在某种程度上违反了协议?追踪会告诉我什么?我应该找什么

这是怎么回事:

您需要从错误中读取所有内容 流动否则,它将 混淆下一个连接,这就是问题所在 原因-1

这是否意味着如果响应是某种类型的错误(这将是什么响应代码),则必须完全读取流?此外,每次尝试http请求时,我基本上都在创建一个新连接,然后在最后断开连接

然而,在我的情况下,我没有得到401或任何东西。总是200。但我的第二次连接几乎总是失败。这是否意味着我应该读取一些其他数据,而我没有(以类似的方式,错误流必须被完全读取)

请帮我解释一下?我觉得我缺少一些基本的http协议理解


PS如果我只是使用ApacheHttpClient,我是否不必处理所有这些协议细节?它为我解决了所有问题吗?

默认HTTP URL处理程序中对keep alive的支持存在很大缺陷。我们总是把它关掉

如果希望保持活动状态,请将Apache HttpClient与池连接管理器一起使用。如果你不想改变你的代码,你可以得到另一个这样的处理程序

如果您的第二个连接总是失败,这意味着您的服务器不支持keepalive。使用Keepalive,HTTP处理程序只会使连接保持打开状态(即使您调用disconnect)。如果不支持keep alive,服务器将关闭连接,但处理程序在您对连接发出下一个请求之前不知道,因此第二个连接将失败


关于读取错误流,它只适用于收到非200个响应的情况。

我想您可能在谈论这个HttpURLConnection错误,在froyo中修复:


查看该bug以了解其他解决方法。如果这不是您遇到的bug,请在中提出一个带有可重复测试用例的bug。

谢谢。你用这个禁用它,对吗
System.setProperty(“http.keepAlive”、“false”)
。另外,为了保持健壮性,是否值得为所有非200响应实现您的代码示例?当然,您应该始终阅读所有响应。它可能包含有价值的错误消息。