我目前的问题与这个非常相似。
我有一个downloadFile(URL)
函数可以创建一个新的 HttpURLConnection,打开它,读取它,返回结果。当我在同一个 URL 上多次调用此函数时,第二次几乎总是返回 -1 的响应代码(但不会抛出异常!!!)。
该问题的最佳答案非常有帮助,但我试图理解一些事情。
那么,如果将 http.keepAlive 设置为 false 可以解决问题,那么它究竟表明了什么?服务器以违反 http 协议的方式响应?或者更有可能,我的代码在某种程度上违反了协议?痕迹会告诉我什么?我应该寻找什么?
这有什么关系:
您需要从错误流中读取所有内容。否则,它将混淆下一个连接,这就是 -1 的原因。
这是否意味着如果响应是某种类型的错误(这将是什么响应代码?),流必须被完全读取?此外,每次我尝试一个 http 请求时,我基本上都是在创建一个新连接,然后disconnect()
在最后对其进行 ing。
但是,就我而言,我没有得到 401 或其他什么。它总是 200。但我的第二次连接几乎总是失败。这是否意味着我应该读取其他一些我没有读取的数据(以类似的方式必须完全读取错误流)?
请帮助阐明这一点?我觉得我缺少一些基本的 http 协议理解。
PS 如果我只是使用 Apache HttpClient,我是否不必处理所有这些协议细节?它会照顾我的一切吗?