2012-03-08 13 views
6

私はpython -m SimpleHTTPServerを使ってウェブブラウザでローカルテストのためのディレクトリを提供しています。一部のコンテンツには大きなデータファイルが含まれています。私はそれらをgzipして、SimpleHTTPServerにContent-Encoding:gzipを提供するようにしたいと思います。コンテンツエンコーディングの使い方:gzip with Python SimpleHTTPServer

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

答えて

4

これは古い質問ですが、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() 
+0

velis以下の方法は、あなたがどこかに、完全に機能コードがありますか? –

+0

もちろん、上のコードはそのコードのまっすぐなコピーペーストでした。しかしもう一度、上記のスニペットはすべてのことを言っており、完全なコードはJSONブリッジとしても機能し、この疑問の母親をやや曖昧にするでしょう。とにかく、情報やコードが必要な場合は、私にメールを送ってください。 – velis

+0

ありがとう - ちょうどあなたのラインを落とした。 –

0

ビル、ここで私はそれを行う方法です。 g小さなデータを圧縮することは時間がかかりませんし、サイズを大きくすることができます。 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) 
2

他にも多くの人々が、私はpython -m SimpleHTTPServerをローカルテストに使用しています。これはまだGoogle上で最高の結果であり、https://github.com/ksmith97/GzipSimpleHTTPServerは素晴らしい解決策ですが、要求されていなくてもgzipを強制し、有効/無効にするフラグはありません。

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

go get github.com/rhardih/serve

すでに$GOPATH$PATHに追加されている場合、それはあなたが必要とするすべてです。今すぐあなたはコマンドとしてserveを持っています。

https://github.com/rhardih/serve