for anyone who might be interested in a solution to this problem, here's
some code which seems to do the trick:

/*
 * GZIPAwarePostMethod.java
 *
 * Created on February 21, 2005, 5:25 PM
 *
 */

import java.io.IOException;
import java.util.zip.GZIPInputStream;

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.PostMethod;

/**
 *
 * @author aleem
 */
public class GZIPAwarePostMethod extends PostMethod {

    /** Creates a new instance of GZIPAwarePostMethod */
    public GZIPAwarePostMethod() {
        super();
    }

    /**
     * Constructor specifying a URI.
     *
     * @param uri either an absolute or relative URI
     *
     * @since 1.0
     */
    public GZIPAwarePostMethod(String uri) {
        super(uri);
    }

    /**
     * Constructor specifying a URI and a tempDir.
     *
     * @param uri either an absolute or relative URI
     * @param tempDir directory to store temp files in
     *
     * @deprecated the client is responsible for disk I/O
     * @since 1.0
     */
    public GZIPAwarePostMethod(String uri, String tempDir) {
        super(uri, tempDir);
    }

    /**
     * Constructor specifying a URI, tempDir and tempFile.
     *
     * @param uri either an absolute or relative URI
     * @param tempDir directory to store temp files in
     * @param tempFile file to store temporary data in
     *
     * @deprecated the client is responsible for disk I/O
     * @since 1.0
     */
    public GZIPAwarePostMethod(String uri, String tempDir, String tempFile) {
        super(uri, tempDir, tempFile);
    }

/**
* Overrides method in [EMAIL PROTECTED] HttpMethodBase}.
*
* Notifies the server that we can process a GZIP-compressed response before
* sending the request.
*
*/
public int execute(HttpState state, HttpConnection conn) throws HttpException, HttpRecoverableException, IOException {
// Tell the server that we can handle GZIP-compressed data in the response body
addRequestHeader("Accept-Encoding", "gzip");


        return super.execute(state, conn);
    }

    /**
     * Overrides method in [EMAIL PROTECTED] GetMethod} to set the 
responseStream variable appropriately.
     *
     * If the response body was GZIP-compressed, responseStream will be set to 
a GZIPInputStream
     * wrapping the original InputStream used by the superclass.
     *
     */
    protected void readResponseBody(HttpState state, HttpConnection conn) 
throws IOException, HttpException {
        super.readResponseBody(state, conn);

        Header contentEncodingHeader = getResponseHeader("Content-Encoding");

        if (contentEncodingHeader != null && 
contentEncodingHeader.getValue().equalsIgnoreCase("gzip"))
            setResponseStream(new GZIPInputStream(getResponseStream()));
    }

}

cheers,
aleem.

-------------

Oleg Kalnichevski wrote:
Aleem,

HttpClient is content agnostic per design. Application specific content
handling should be built on top of HttpClient services

Oleg

On Fri, 2005-02-18 at 13:41 -0500, llem wrote:

does anyone know whether or not httpclient (version 2 or 3) can decode gzip-compressed responses from a server?

or does the application need to be compression-aware, and do the decoding itself after calling getResponseBodyAsStream()?

any help appreciated...thanks!
aleem.

---------------------------------------------------------------------
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]



Reply via email to