Python で Web サービスを使用するアプリケーションを開発しています。両側 (サーバーとクライアント) は Python で開発され、Web サービスに SOAPpy を使用しますが、xml が冗長すぎるため、圧縮したいのですが、これまでのところGoogleで検索したので、役立つものが見つかりません。
1 に答える
ここに示すように、SOAPpy 呼び出しに HTTP ヘッダーを追加できます(この例では Cookie を送信しますが、別のヘッダーを追加するように一般化できます) -- 圧縮を要求するには、 header を追加しAccept-Encoding: gzip
ます。Web サーバー (Python の「SOAPpy サーバー」のようなアプリケーション サーバーではなく、Apache などの上で実行される実際の HTTP サーバー) は圧縮を提供し、それContent-Encoding: gzip
を確認するためのヘッダーを応答に含める必要があります (そうでない場合)。正しく動作しない場合は、トランスポート クラスをサブクラス化し、そこに自分で圧縮を挿入する必要があります (チェックする SOAPpy のインストールは手元にありません)。
欠けているビットは、さらに処理する前にペイロードを解凍する方法です。正しいアプローチは、 add-header 部分と同様に、SOAPpy.SOAPProxy
もう一度 subclassにすることです。HTTPTransport
上記の URL の行data = response.read()
を見て、ヘッダーを確認し (必要に応じてコンテンツのエンコードが gzip であることを確認するため)、必要に応じて解凍することを検討してください。
もちろん、gzip 圧縮と解凍を処理するには、Python の標準ライブラリのzlibモジュールを使用できます (ファイルを作成および読み取るためにヘッダー メタデータ処理にgzip
追加するモジュールではありません。ファイルではなくストリームを処理します)。アルゴリズムで圧縮され、それがの仕事です)。zlib
.gz
.gz
gzip
zlib