0

Python で Web サービスを使用するアプリケーションを開発しています。両側 (サーバーとクライアント) は Python で開発され、Web サービスに SOAPpy を使用しますが、xml が冗長すぎるため、圧縮したいのですが、これまでのところGoogleで検索したので、役立つものが見つかりません。

4

1 に答える 1

2

ここに示すように、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.gzgzipzlib

于 2010-03-06T06:49:57.793 に答える