Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GZip POST request with HTTPClient in Java

I need to send a POST request to a web server which includes a gzipped request parameter. I'm using Apache HttpClient and I've read that it supports Gzip out of the box, but I can't find any examples of how to do what I need. I'd appreciate it if anyone could post some examples of this.

like image 446
Alex Bliskovsky Avatar asked Aug 22 '11 20:08

Alex Bliskovsky


1 Answers

You need to turn that String into a gzipped byte[] or (temp) File first. Let's assume that it's not an extraordinary large String value so that a byte[] is safe enough for the available JVM memory:

String foo = "value";
ByteArrayOutputStream baos = new ByteArrayOutputStream();

try (GZIPOutputStream gzos = new GZIPOutputStream(baos)) {
    gzos.write(foo.getBytes("UTF-8"));
}

byte[] fooGzippedBytes = baos.toByteArray();

Then, you can send it as a multipart body using HttpClient as follows:

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);
// ...

Note that HttpClient 4.1 supports the new ByteArrayBody which can be used as follows:

entity.addPart("foo", new ByteArrayBody(fooGzippedBytes, "foo.txt"));
like image 127
BalusC Avatar answered Nov 13 '22 06:11

BalusC