HttpClient:禁用分块编码

Thi*_*kel 2 java http restlet apache-commons-httpclient

我使用Apache Commons HttpClient和Restlet来调用一个宁静的Web服务.不幸的是,我的服务器(基于Ruby on Rails)不喜欢Transfer-Encoding: chunkedHttpClient默认使用的服务器.

有没有办法禁止从客户端使用分块编码的POST?

Sla*_*ast 5

作为一般规则,对于不被分块的请求,您需要指定post body的确切大小,对于动态生成的数据,这意味着您需要在内存中缓冲整个响应,查看其大小然后才发送它.

Apache客户端文档似乎证实了这一点:AbstractHttpEntity.setChunked()状态

请注意,分块设置仅为提示.如果使用HTTP/1.0,则永远不会执行分块.否则,即使chunked为false,如果实体内容长度未知(-1),HttpClient也必须使用块编码.


Jer*_*vel 2

正如 Restlet 邮件列表中所述,在 Restlet 2.1 版本中,您可以将 ClientResource#entityBuffering 属性设置为 true 以将内容缓存在内存中并防止分块编码。