3

使用 HttpClient 4.0,我遇到了一个问题,我从中得到的响应ResponseHandler只有实际页面内容的一半左右(字符串中的 ~61k 字节与返回到浏览器的页面中的 ~125k)。我似乎找不到任何可能存在某种限制的地方。有任何想法吗?

更新:我发现的另一件事是实体getContentLength方法返回的大小是-1,而它是前一个请求的正常值。javadoc 似乎表明这意味着长度是未知的 - 任何想法为什么会这样?

Update2:我尝试为超过 80KB 的页面找到响应。有趣的是,响应字符串的最大长度始终为 18210 个字符。有任何想法吗??

4

3 回答 3

2

这可能不是它,但如果你没有在某处刷新流,有时可能会发生这种情况。

于 2010-03-21T00:42:46.933 回答
1

我发现这是我client.getConnectionManager().shutdown()在阅读回复之前打电话引起的。在执行请求时,我搞砸了我的一个finally {}块,并且关闭导致了竞争条件,有时会在读取中终止响应。

只是碰巧getContentLength()为我返回了-1,这是由 Transfer-Encoding: chunked header 引起的。我曾假设 HttpClient 库没有正确处理分块响应,但实际上这只是我的失误。

于 2012-03-19T06:10:49.343 回答
0

您应该查看的另一个地方是服务器端。

一种可能性是 webapp 代码偶尔会在编写响应的过程中出现摇晃。另一个是服务器容器代码中存在错误。例如,我隐约记得在一些旧版本的 Tomcat 中存在一个错误,导致大量响应被破坏/截断。

于 2010-03-21T08:06:33.730 回答