4

私はhttpclient 4を使用しています。

new DecompressingHttpClient(client).execute(method)

クライアントは gzip を受け入れ、サーバーが gzip を送信すると解凍します。

しかし、クライアントがデータをgzipで送信したことをどのようにアーカイブできますか?

4

1 に答える 1

6

HttpClient 4.3 API:

HttpEntity entity = EntityBuilder.create()
       .setText("some text")
       .setContentType(ContentType.TEXT_PLAIN)
       .gzipCompress()
       .build();

HttpClient 4.2 API:

HttpEntity entity = new GzipCompressingEntity(
     new StringEntity("some text", ContentType.TEXT_PLAIN));

GzipCompressingEntity の実装:

 public class GzipCompressingEntity extends HttpEntityWrapper {

    private static final String GZIP_CODEC = "gzip";

    public GzipCompressingEntity(final HttpEntity entity) {
        super(entity);
    }

    @Override
    public Header getContentEncoding() {
        return new BasicHeader(HTTP.CONTENT_ENCODING, GZIP_CODEC);
    }

    @Override
    public long getContentLength() {
        return -1;
    }

    @Override
    public boolean isChunked() {
        // force content chunking
        return true;
    }

    @Override
    public InputStream getContent() throws IOException {
        throw new UnsupportedOperationException();
    }

    @Override
    public void writeTo(final OutputStream outstream) throws IOException {
        final GZIPOutputStream gzip = new GZIPOutputStream(outstream);
        try {
            wrappedEntity.writeTo(gzip);
        } finally {
            gzip.close();
        }
    }

}
于 2013-07-25T19:49:17.287 に答える