11

python -m SimpleHTTPServerWebブラウザでローカルテスト用のディレクトリを提供するために使用しています。一部のコンテンツには大きなデータファイルが含まれています。それらをgzipで圧縮し、SimpleHTTPServerにContent-Encoding:gzipで提供させたいと思います。

これを行う簡単な方法はありますか?

4

6 に答える 6

12

これは古い質問ですが、私にとっては今でも Google で 1 位にランクされているので、適切な回答は私の近くにいる誰かに役立つかもしれません。

解決策は非常に簡単です。do_GET()、do_POST などでは、以下を追加するだけです。

content = self.gzipencode(strcontent)
...your other headers, etc...
self.send_header("Content-length", str(len(str(content))))
self.send_header("Content-Encoding", "gzip")
self.end_headers()
self.wfile.write(content)
self.wfile.flush()

strcontent は実際のコンテンツ (HTML、javascript、またはその他の HTML リソースなど) であり、gzipencode:

def gzipencode(self, content):
    import StringIO
    import gzip
    out = StringIO.StringIO()
    f = gzip.GzipFile(fileobj=out, mode='w', compresslevel=5)
    f.write(content)
    f.close()
    return out.getvalue()
于 2013-06-12T11:13:32.397 に答える
5

他の多くの人と同じようにpython -m SimpleHTTPServer、ローカル テストにも使用しています。これは依然として Google のトップの結果であり、https://github.com/ksmith97/GzipSimpleHTTPServerは優れたソリューションですが、要求されていなくても gzip を強制し、有効/無効にするフラグはありません。

これをサポートする小さな cli ツールを作成することにしました。それは行くので、通常のインストール手順は簡単です:

go get github.com/rhardih/serve

すでに に$GOPATH追加している場合は$PATH、これで十分です。今、あなたはserveコマンドとして持っています。

https://github.com/rhardih/serve

于 2016-04-27T18:37:02.213 に答える
1

上記の@velisの回答に基づいて、これが私のやり方です。小さなデータを圧縮するのは時間の無駄であり、サイズが大きくなる可能性があります。Dalvik クライアントでテスト済み。

def do_GET(self):
    ... get content
    self.send_response(returnCode)       # 200, 401, etc
    ...your other headers, etc...
    if len(content) > 100:                       # don't bother compressing small data
        if 'accept-encoding' in self.headers:    # case insensitive
            if 'gzip' in self.headers['accept-encoding']:
                content = gzipencode(content)    # gzipencode defined above in @velis answer
                self.send_header('content-encoding', 'gzip')
    self.send_header('content-length', len(content))
    self.end_headers()          # send a blank line
    self.wfile.write(content)
于 2014-09-19T21:21:57.593 に答える
-1

SimpleHTTPServer のドキュメントを見ると、方法はありません。ただし、mod_compress モジュールを使用した lighttpdをお勧めします。

于 2012-04-25T01:01:53.727 に答える