Hi Oleg, Thanks for you quick response and code example -- it is most appreciated! Unfortunately, the multipart entity does not implement the getContent method, so it can't be used (as it currently stands) to obtain the data to be compressed.
Deb --- On Sun, 3/7/10, Oleg Kalnichevski <[email protected]> wrote: > From: Oleg Kalnichevski <[email protected]> > Subject: Re: compressing multipart request from custom client > To: "HttpClient User Discussion" <[email protected]> > Date: Sunday, March 7, 2010, 8:25 AM > 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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
