GZip POST-запрос с HTTPClient в Java - PullRequest
15 голосов
/ 23 августа 2011

Мне нужно отправить запрос POST на веб-сервер, который включает параметр запроса gzipped. Я использую Apache HttpClient и прочитал, что он поддерживает Gzip из коробки, но я не могу найти примеров того, как делать то, что мне нужно. Буду признателен, если кто-нибудь сможет опубликовать несколько примеров этого.

1 Ответ

17 голосов
/ 23 августа 2011

Вам нужно сначала превратить String в сжатый byte[] или (временный) File. Давайте предположим, что это не очень большое значение String, поэтому byte[] достаточно безопасен для доступной памяти JVM:

String foo = "value";
ByteArrayOutputStream baos = new ByteArrayOutputStream();

try (GZIPOutputStream gzos = new GZIPOutputStream(baos)) {
    gzos.write(foo.getBytes("UTF-8"));
}

byte[] fooGzippedBytes = baos.toByteArray();

Затем вы можете отправить его как составное тело с помощью HttpClient следующим образом:

MultipartEntity entity = new MultipartEntity();
entity.addPart("foo", new InputStreamBody(new ByteArrayInputStream(fooGzippedBytes), "foo.txt"));

HttpPost post = new HttpPost("http://example.com/some");
post.setEntity(entity);

HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
// ...

Обратите внимание, что HttpClient 4.1 поддерживает новый ByteArrayBody, который можно использовать следующим образом:

entity.addPart("foo", new ByteArrayBody(fooGzippedBytes, "foo.txt"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...