为什么HttpEntity和HttpResponse没有正确报告内容长度?

时间:2013-07-22 17:21:39

标签: apache-httpclient-4.x

我有一些相当简单的代码,它会调用URL,获取响应,如果有实体,则将实体转移。

当我添加实体内容长度测试时,会出现问题。我可以通过代理运行调用,并看到Content-Length标头设置正确:

Content-Disposition: attachment; filename="something.zip";
Content-Length: 12390600
Content-Type: application/zip

所以在我的代码中我检查:

HttpResponse response = _client.execute(request);
HttpEntity entity = response.getEntity();

if (entity != null && entity.getContentLength() > 0) {
    handleEntity(entity);
}

如果我查看响应,所有预期的标题都是之外的内容长度。当我检查实体对象时,它为 getContentLength()调用返回-1。在文档中,如果您的内容长度超过Long.MAX_VALUE,则会返回一个负数,但that's not the case here.

所以我现在刚刚删除了这个检查,但我真的很想知道在这种情况下意味着什么。文档添加了一个警告,它将返回“如果已知”的内容长度,但在这种情况下,它似乎应该是已知的。

感谢您对此处发生的事情有所了解......

1 个答案:

答案 0 :(得分:1)

我怀疑你是在混合HTTP消息内容长度和多部分内容体中各个MIME正文部分的内容