2010-03-05 3 views
0

Je développe une application qui utilise webservices en python, les deux côtés (serveur et client) sont développés en Python et utilise SOAPpy pour les webservices, mais, vous le savez, le xml est trop verbeux, je veux pour le compresser, mais pour autant que j'ai cherché dans google je ne peux pas trouver quelque chose d'utile.xml compressé sur soapp

+0

À la fin, je n'ai pas vraiment utilisé SOAPpy, mais xmlrpc, la façon compressée est dans mon blog: http://tinyurl.com/2v4aokl (Compressé XMLRPC sur python) – markuz

Répondre

2

Vous pouvez ajouter des en-têtes HTTP à l'appel SOAPpy comme indiqué here (cet exemple envoie des cookies, mais vous pouvez le généraliser pour ajouter différents en-têtes) - pour demander une compression, ajouter Accept-Encoding: gzip. Le serveur Web (pas le serveur d'application, comme votre "serveur SOAPpy" en Python, mais le serveur HTTP sur lequel il s'exécute, par exemple Apache) devrait fournir la compression et avoir dans la réponse un en-tête Content-Encoding: gzip pour confirmer que (si ne fonctionne pas correctement, vous devrez sous-classer la classe de transport et insérer la compression vous-même - je n'ai pas d'installation SOAPpy à portée de main pour vérifier). Le bit manquant est, comment tromper votre SOAPpy.SOAPProxy en décompression de la charge utile avant de poursuivre le traitement - et la bonne approche est de nouveau à sous-classe HTTPTransport, tout comme pour la partie d'en-tête; dans l'URL ci-dessus, regardez la ligne data = response.read() et pensez à vérifier les en-têtes (pour confirmer que l'encodage du contenu est gzip comme requis) et à décompresser si nécessaire.

Pour faire face à la compression gzip et la décompression, bien sûr, vous pouvez utiliser le module zlib de la bibliothèque standard de Python (pas le module gzip, ce qui ajoute à zlib le traitement des métadonnées d'en-tête pour faire et lire .gz fichiers - vous êtes ne traite pas des fichiers .gz mais des flux compressés avec l'algorithme gzip, et c'est le travail de zlib).

+0

Merci, vraiment utile. J'avais déjà vu la recette, mais je ne l'ai pas vraiment comprise, pas que ça soit un peu plus clair. Merci encore. – markuz

Questions connexes