java - Java 中使用 HTTPClient 的 GZip POST 请求

标签 java gzip httpclient

我需要向网络服务器发送一个 POST 请求,其中包含一个 gzip 压缩的请求参数。我正在使用 Apache HttpClient,并且我读到它支持开箱即用的 Gzip,但我找不到任何示例来说明如何执行我需要的操作。如果有人可以发布一些这样的示例,我将不胜感激。

最佳答案

您需要先将该 String 转换为 gzipped byte[] 或 (temp) File。我们假设它不是特别大的 String 值,这样 byte[] 对于可用的 JVM 内存就足够安全了:

String foo = "value";
ByteArrayOutputStream baos = new ByteArrayOutputStream();

try (GZIPOutputStream gzos = new GZIPOutputStream(baos)) {
    gzos.write(foo.getBytes("UTF-8"));
}

byte[] fooGzippedBytes = baos.toByteArray();

然后,您可以使用 HttpClient 将其作为多部分正文发送,如下所示:

MultipartEntity entity = new MultipartEntity();
entity.addPart("foo", new InputStreamBody(new ByteArrayInputStream(fooGzippedBytes), "foo.txt"));

HttpPost post = new HttpPost("http://example.com/some");
post.setEntity(entity);

HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
// ...

请注意,HttpClient 4.1 支持新的 ByteArrayBody可以按如下方式使用:

entity.addPart("foo", new ByteArrayBody(fooGzippedBytes, "foo.txt"));

关于java - Java 中使用 HTTPClient 的 GZip POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7153484/

相关文章:

java - 正确删除三元搜索树中的节点

java - 从 java 运行 mysql 命令

python - 包含python3中JSON数据的不同压缩方式

java - HTTPCLIENT 不存在?网 bean

c# - 为什么我的 httpresponsemessage 的内容标题没有添加到正确的字段?

java 数组返回最小值

php - gzip 并作为字符串返回

JAVA not in gzip format错误

c# - 如何使用 .Net 4.0 中的 HttpClient 将 XML 响应解析为 .Net 类?

java - getResourceAsStream 在 Eclipse IDE 中有效,但在 JAR 格式中无效