web-dev-qa-db-ja.com

GZip POST HTTPClientを使用したリクエストJava

POSTリクエストをgzip圧縮されたリクエストパラメータを含むウェブサーバーに送信する必要があります。ApacheHttpClientを使用しており、そのままGzipをサポートしていることを読みましたが、必要な方法の例が見つかりません。誰かがこの例を投稿していただければ幸いです。

15
Alex Bliskovsky

まず、そのStringをgzip圧縮されたbyte[]または(temp)Fileに変換する必要があります。 byte[]が利用可能なJVMメモリに対して十分に安全であるように、それが異常に大きなString値ではないと仮定しましょう。

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"));
17
BalusC