我正在使用 apache httpclient 4.2 发送多部分 HTTP PUT 请求。客户端必须上传 500 MB 左右的大尺寸二进制数据。因此需要压缩。 我希望压缩整个 Multipart HTTP 请求并通过 header Content-Encoding: gzip 通知服务器。我控制服务器以及客户端代码。
注意:我知道可以有选择地压缩大尺寸二进制数据而不是整个请求的方法,但现在我排除了这种方法。
httpclient 的 HttpRequestInterceptor 类不提供请求输入流的句柄或压缩请求的实体。
我在网上搜索并发现了一些相关链接(如下),但没有一个有效 1.http://old.nabble.com/compressing-multipart-request-from-custom-client-tt27804438.html#a27811350 2.http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#protocol_interceptors - 此链接表示“协议(protocol)拦截器还可以操作消息中包含的内容实体 - 透明内容压缩/解压缩就是一个很好的例子。”但不知道如何获得所需的功能。
请给我一些指导,如果可能的话一些示例代码。
最佳答案
我终于能够解决这个需求
- 创建 org.apache.http.entity.mime.MultipartEntity 对象 reqEntity。
将压缩的二进制部分添加到 HTTP 请求
ByteArrayBody 二进制数据 = new ByteArrayBody(compressedData, "二进制/八位字节流", "N/A"); binaryParts.add(binaryData); reqEntity.addPart(“uniqueId”,binaryPart);
关于http - 如何压缩客户端发送的 Multipart HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13059706/