我正在使用Apache Commons HttpClient和Restlet来调用restful web服务。不幸的是,我的服务器(基于Ruby on Rails)不喜欢HttpClient默认使用的Transfer-Encoding: chunked
。
有没有办法禁止对来自客户端的帖子使用分块编码?
发布于 2011-10-11 15:02:12
正如Restlet邮件列表中所述,在Restlet版本2.1中,您可以将ClientResource#entityBuffering属性设置为true,以在内存中缓存内容并防止分块编码。
发布于 2011-10-11 10:26:48
一般来说,对于不被分块的请求,您需要指定post正文的确切大小,对于动态生成的数据,这意味着您需要在内存中缓冲整个响应,查看其大小,然后才发送它。
Apache客户端文档似乎证实了这一点:AbstractHttpEntity.setChunked()
状态
请注意,分块设置只是一个提示。如果使用HTTP/1.0,则永远不会执行分块。否则,即使分块为false,如果实体内容长度未知(-1),HttpClient也必须使用分块编码。
发布于 2015-04-02 06:53:24
正如@Slartibartfast在他的回答中暗示的那样,最可靠的方法是显式地将HttpPost切换到HTTP1.0协议。
Apache HttpPost = new HttpPost(someUrl);httpPost.setProtocolVersion(HttpVersion.HTTP_1_0);//因为Apache HttpClient
我对Android开发进行了测试,它需要稍微不同的类名……(参见https://github.com/andstatus/andstatus/issues/249 )
https://stackoverflow.com/questions/7721554
复制