在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"));