Httpclient没有返回整个响应

时间:2010-03-21 00:04:18

标签: java httpclient

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

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我发现这是因为我在阅读回复之前调用了client.getConnectionManager().shutdown()。在执行请求时,我已经完成了finally {}块中的一个,并且关闭导致了竞争条件,有时会在读取过程中终止响应。

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

答案 2 :(得分:0)

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

一种可能性是,webapp代码偶尔会在编写响应中途摇摆不定。另一个是服务器容器代码中存在错误。例如,我模糊地回忆起一些旧版本的Tomcat中存在一个错误,导致大量响应被破坏/截断。