Debbie wrote:
I have a multipart request that I would like to gzip compress via a
custom HttpClient (so it can be decompressed by apache via MOD deflate
on the server side). I tried to just compress the files themselves but
the apache server seems to want the entire body of the request
compressed in order to decompress.
I’ve read a post by Oleg in 2008 that states this is easy to do and yet
I’m not sure how to make this work using the RequestInterceptor going
from client to server.
Any pointers would be very appreciated.
Thanks!
Deb
Try this:
---
public static void main(String[] args) throws Exception {
HttpHost targetHost = new HttpHost("www.sometarget.com", 80, "http");
DefaultHttpClient httpclient = new DefaultHttpClient();
BasicHttpContext localcontext = new BasicHttpContext();
HttpPost httppost = new HttpPost("/");
MultipartEntity reqentity = new
MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqentity.addPart("stuff", new StringBody("some stuff"));
httppost.setEntity(new GzipCompressingEntity(reqentity));
HttpResponse response = httpclient.execute(targetHost, httppost,
localcontext);
System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
if (entity != null) {
entity.consumeContent();
}
}
static class GzipCompressingEntity extends HttpEntityWrapper {
private static final String GZIP_CODEC = "gzip";
public GzipCompressingEntity(final HttpEntity entity) {
super(entity);
}
public Header getContentEncoding() {
return new BasicHeader(HTTP.CONTENT_ENCODING, GZIP_CODEC);
}
public long getContentLength() {
return -1;
}
public boolean isChunked() {
// force content chunking
return true;
}
public void writeTo(final OutputStream outstream) throws IOException {
if (outstream == null) {
throw new IllegalArgumentException("Output stream may not
be null");
}
GZIPOutputStream gzip = new GZIPOutputStream(outstream);
InputStream in = wrappedEntity.getContent();
byte[] tmp = new byte[2048];
int l;
while ((l = in.read(tmp)) != -1) {
gzip.write(tmp, 0, l);
}
gzip.close();
}
}
---
Hope this helps
Oleg
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]