使用Java中的HTTPClient进行GZip POST请求

Ale*_*sky 15 java gzip httpclient

我需要向Web服务器发送一个POST请求,其中包含一个gzip压缩请求参数.我正在使用Apache HttpClient,我已经读过它支持开箱即用的Gzip,但我找不到任何如何做我需要的例子.如果有人能发布一些这方面的例子,我会很感激.

Bal*_*usC 17

您需要先将其String转换为gzip byte[]或(temp)File.让我们假设它不是一个非常大的String值,因此a 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();
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用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);
// ...
Run Code Online (Sandbox Code Playgroud)

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

entity.addPart("foo", new ByteArrayBody(fooGzippedBytes, "foo.txt"));
Run Code Online (Sandbox Code Playgroud)