Сжатый XML на Soappy - PullRequest
       11

Сжатый XML на Soappy

0 голосов
/ 06 марта 2010

Я разрабатываю приложение, которое использует веб-сервисы на python, обе стороны (сервер и клиент) разработаны на Python и используют SOAPpy для веб-сервисов, но, вы знаете, XML слишком многословен, я хочу сжать его но, насколько я искал в Google, я не могу найти что-то полезное.

1 Ответ

2 голосов
/ 06 марта 2010

Вы можете добавить HTTP-заголовки к вызову SOAPpy, как показано здесь (этот пример отправляет куки, но вы можете обобщить его, добавив разные заголовки) - чтобы запросить сжатие, добавьте заголовок Accept-Encoding: gzip. Веб-сервер (не сервер приложений, как ваш «сервер SOAPpy» в Python, но реальный HTTP-сервер, на котором он работает, например, Apache) должен обеспечить сжатие и иметь в ответе заголовок Content-Encoding: gzip для подтверждения того, что ( если это не работает должным образом, вам придется создать подкласс транспортного класса и вставить туда сжатие самостоятельно - у меня нет установки SOAPpy для проверки).

Недостающий бит состоит в том, как обмануть SOAPpy.SOAPProxy в декомпрессии полезной нагрузки перед дальнейшей обработкой - и правильный подход - снова подкласс HTTPTransport, как для части add-header; в приведенном выше URL-адресе посмотрите на строку data = response.read() и рассмотрите возможность проверки заголовков (чтобы убедиться, что кодировка содержимого gzip соответствует требованиям) и распаковку при необходимости.

Конечно, для сжатия и распаковки gzip вы можете использовать модуль zlib стандартной библиотеки Python (не модуль gzip, который добавляет к zlib обработку метаданных заголовка, чтобы сделать и читать .gz файлы - вы имеете дело не с .gz файлами, а с потоками, сжатыми по алгоритму gzip, и это работа zlib).

...