我需要向网络服务器发送一个 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/