Сжатый 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
работа).