Мне нужно отправить HTTPPost с телом gzipped, сервер также принимает данные не gzipped, но предпочел бы, чтобы они были сжаты, поэтому я пытаюсь преобразовать некоторый существующий рабочий код для использования gzip. В настоящее время данные установлены с
httpMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Я попытался создать подкласс HttpEntityWrapper
static class GzipWrapper extends HttpEntityWrapper
{
public GzipWrapper(HttpEntity wrapped)
{
super(wrapped);
}
public void writeTo(OutputStream outstream)
throws IOException
{
GZIPOutputStream gzip = new GZIPOutputStream(outstream);
super.writeTo(gzip);
}
}
и изменился на
httpMethod.setEntity(new GzipWrapper(
new UrlEncodedFormEntity(nameValuePairs)));
и добавил
if (!httpMethod.containsHeader("Accept-Encoding"))
{
httpMethod.addHeader("Accept-Encoding", "gzip");
}
, но теперь мой запрос просто время ожидания, я думаю, что должночто-то не так с моим GZIpWrapper, но я не уверен, что.
В другой заметке я посмотрел на пример http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientGZipContentCompression.java..Помимо того, что мне не нравятся перехватчики, потому что трудно следить за ходом программы, для меня это не имеет смысла, потому что заголовок запроса настроен на указание серверу принимать данные gzip, но нигде он фактически не кодирует любые данные gzip, он только распаковывает файлыответ.