GZip POST request with HTTPClient in Java
2022-09-03 06:40:20
我需要向包含gzipped请求参数的Web服务器发送POST请求。我正在使用Apache HttpClient,我已经读到它支持开箱即用的Gzip,但我找不到任何如何做我需要的事情的例子。如果有人能发布一些这方面的例子,我将不胜感激。
我需要向包含gzipped请求参数的Web服务器发送POST请求。我正在使用Apache HttpClient,我已经读到它支持开箱即用的Gzip,但我找不到任何如何做我需要的事情的例子。如果有人能发布一些这方面的例子,我将不胜感激。
您需要先将其转换为gzip或(临时)。让我们假设它不是一个非常大的值,以便 a 对于可用的 JVM 内存足够安全:String
byte[]
File
String
byte[]
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"));