Сжатый XML на Soappy

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

1 ответ

Решение

Вы можете добавить HTTP-заголовки к вызову SOAPpy, как показано здесь (в этом примере отправляются файлы cookie, но вы можете обобщить его для добавления различных заголовков) - чтобы запросить сжатие, добавьте заголовок 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работа).

Другие вопросы по тегам