python -m SimpleHTTPServer
Webブラウザでローカルテスト用のディレクトリを提供するために使用しています。一部のコンテンツには大きなデータファイルが含まれています。それらをgzipで圧縮し、SimpleHTTPServerにContent-Encoding:gzipで提供させたいと思います。
これを行う簡単な方法はありますか?
python -m SimpleHTTPServer
Webブラウザでローカルテスト用のディレクトリを提供するために使用しています。一部のコンテンツには大きなデータファイルが含まれています。それらをgzipで圧縮し、SimpleHTTPServerにContent-Encoding:gzipで提供させたいと思います。
これを行う簡単な方法はありますか?
これは古い質問ですが、私にとっては今でも 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()
他の多くの人と同じようにpython -m SimpleHTTPServer
、ローカル テストにも使用しています。これは依然として Google のトップの結果であり、https://github.com/ksmith97/GzipSimpleHTTPServerは優れたソリューションですが、要求されていなくても gzip を強制し、有効/無効にするフラグはありません。
これをサポートする小さな cli ツールを作成することにしました。それは行くので、通常のインストール手順は簡単です:
go get github.com/rhardih/serve
すでに に$GOPATH
追加している場合は$PATH
、これで十分です。今、あなたはserve
コマンドとして持っています。
上記の@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)
SimpleHTTPServer のドキュメントを見ると、方法はありません。ただし、mod_compress モジュールを使用した lighttpdをお勧めします。