首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >HttpClient:禁用分块编码

HttpClient:禁用分块编码
EN

Stack Overflow用户
提问于 2011-10-11 12:59:07
回答 3查看 16.6K关注 0票数 4

我正在使用Apache Commons HttpClient和Restlet来调用restful web服务。不幸的是,我的服务器(基于Ruby on Rails)不喜欢HttpClient默认使用的Transfer-Encoding: chunked

有没有办法禁止对来自客户端的帖子使用分块编码?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-11 23:02:12

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

票数 2
EN

Stack Overflow用户

发布于 2011-10-11 18:26:48

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2015-04-02 14:53:24

正如@Slartibartfast在他的回答中暗示的那样,最可靠的方法是显式地将HttpPost切换到HTTP1.0协议。

  1. 将apache HttpPost请求设置为HTTP1.0协议(如果需要,HttpGet也是如此...):

Apache HttpPost = new HttpPost(someUrl);httpPost.setProtocolVersion(HttpVersion.HTTP_1_0);//因为Apache HttpClient

  • When创建多部分post请求v.4.3提供的附件输入不是InputStream (对于HTTP1.1,它会导致分块编码),而是一个字节数组,您必须事先从相同的流中创建它。这就是为什么内容长度是已知的。请参见org.apache.http.entity.mime.MultipartEntityBuilder.addBinaryBody(String,byte[],ContentType,String)

我对Android开发进行了测试,它需要稍微不同的类名……(参见https://github.com/andstatus/andstatus/issues/249 )

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7721554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档