2012-03-08 15 views
6

के साथ gzip मैं वेब ब्राउज़र में स्थानीय परीक्षण के लिए निर्देशिका की सेवा के लिए python -m SimpleHTTPServer का उपयोग कर रहा हूं। कुछ सामग्री में बड़ी डेटा फाइलें शामिल हैं। मैं उन्हें gzip करने में सक्षम होना चाहता हूं और SimpleHTTPServer उन्हें सामग्री-एन्कोडिंग के साथ सेवा प्रदान करता हूं: gzip।सामग्री-एन्कोडिंग का उपयोग कैसे करें: पायथन सरल एचटीटीपीएस सर्वर

क्या ऐसा करने का कोई आसान तरीका है?

उत्तर

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 संसाधनों) और 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 पुल के रूप में कार्य करता है जो इस प्रश्न के purpouse को अस्पष्ट कर देगा। वैसे भी, अगर आपको अधिक जानकारी या कोड चाहिए तो मुझे एक मेल छोड़ दें। – velis

+0

धन्यवाद - बस आपको एक लाइन गिरा दी। –

7

चूंकि यह शीर्ष Google परिणाम था, मुझे लगा कि मैं अपनी सरल संशोधन को उस स्क्रिप्ट पर पोस्ट करूंगा जिसने काम करने के लिए gzip प्राप्त किया था।

https://github.com/ksmith97/GzipSimpleHTTPServer

0

बिल्डिंग @velis पर ऊपर का जवाब, यहाँ है कैसे मैं यह कर। छोटे डेटा gZipping समय के लायक नहीं है और इसके आकार में वृद्धि कर सकते हैं। 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

संबंधित मुद्दे