java HttpClient:禁用分块编码
我正在使用ApacheCommonsHttpClient和Restlet来调用RESTfulWeb服务。不幸的是,我的服务器(基于RubyonRails)不喜欢HttpClient默认使用的Transfer-Encoding: chunked
是否有任何方法可以禁用对来自客户端的帖子使用分块编码
你可以在下面搜索框中键入要查询的问题!
我正在使用ApacheCommonsHttpClient和Restlet来调用RESTfulWeb服务。不幸的是,我的服务器(基于RubyonRails)不喜欢HttpClient默认使用的Transfer-Encoding: chunked
是否有任何方法可以禁用对来自客户端的帖子使用分块编码
# 1 楼答案
正如在Restlet邮件列表中所述,在Restlet版本2.1中,您可以将ClientResource#entityBuffering属性设置为true,以在内存中缓存内容并防止分块编码
# 2 楼答案
正如@Slartibartfast在他的回答中暗示的那样,最可靠的方法是显式地将HttpPost切换到http1.0协议
将apache HttpPost请求设置为HTTP 1.0协议(如果需要,HttpGet也是如此…):
HttpPost HttpPost=新的HttpPost(someUrl); httpPost。setProtocolVersion(HttpVersion.HTTP_1_0);//从Apache HttpClient的第4.3版开始
在创建多部分post请求时,为附件提供的输入不是InputStream(如HTTP 1.1,它会导致分块编码),而是一个字节数组,您必须事先从同一个流创建该数组。这就是内容长度已知的原因。见组织。阿帕奇。http。实体哑剧表演多部件生成器。addBinaryBody(字符串,字节[],内容类型,字符串)
我在Android开发中测试了这个,需要稍微不同的类名。。。(见https://github.com/andstatus/andstatus/issues/249)
# 3 楼答案
作为一般规则,对于不分块的请求,您需要指定post正文的确切大小,对于动态生成的数据,这意味着您需要在内存中缓冲整个响应,查看其大小,然后才发送它
Apache客户端文档似乎证实了这一点:^{} 声明