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

我需要发送POST请求到一个包含gzip请求参数的web服务器。 我正在使用Apache HttpClient,我已经读过,它支持Gzip开箱,但我找不到任何如何做我需要的例子。 我会很感激,如果任何人可以发表这样的一些例子。

您需要首先将该String转换为压缩byte[]或(temp) File 。 让我们假设它不是一个非常大的String值,所以对于可用的JVM内存来说, 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"));