私はhttpclient 4を使用しています。
new DecompressingHttpClient(client).execute(method)
クライアントは gzip を受け入れ、サーバーが gzip を送信すると解凍します。
しかし、クライアントがデータをgzipで送信したことをどのようにアーカイブできますか?
私はhttpclient 4を使用しています。
new DecompressingHttpClient(client).execute(method)
クライアントは gzip を受け入れ、サーバーが gzip を送信すると解凍します。
しかし、クライアントがデータをgzipで送信したことをどのようにアーカイブできますか?
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();
}
}
}