Advertisement
rfmonk

http_compression.py

Jul 7th, 2014
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.44 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #
  3. """
  4. give server users better performance
  5. by compressing HTTP data, speed up the serving of content
  6. """
  7.  
  8. import argparse
  9. import string
  10. import os
  11. import sys
  12. import gzip
  13. import cStringIO
  14. from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
  15.  
  16. DEFAULT_HOST = '127.0.0.1'
  17. DEFAULT_PORT = 8800
  18. HTML_CONTENT = """<html><body><h1>Compressed Hello World!</h1></body></html>"""
  19.  
  20.  
  21. class RequestHandler(BaseHTTPRequestHandler):
  22.  
  23.  
  24.     def do_GET(self):
  25.         self.send_response(200)
  26.         self.send_header('Content-type','text/html')
  27.         self.send_header('Content-Encoding','gzip')
  28.  
  29.         zbuf = self.compress_buffer(HTML_CONTENT)
  30.         sys.stdout.write("Content-Encoding: gzip\r\n")
  31.         sys.stdout.write("Content-Length: %d\r\n" % (len(zbuf)))
  32.         sys.stdout.write("\r\n")
  33.         self.wfile.write(zbuf)
  34.         return
  35.  
  36.     def compress_buffer(self, buf):
  37.         zbuf = cStringIO.StringIO()
  38.         zfile = gzip.GzipFile(mode = 'wb', fileobj = zbuf, compresslevel = 6)
  39.         zfile.write(buf)
  40.         zfile.close()
  41.         return zbuf.getvalue()
  42.  
  43. if __name__ == '__main__':
  44.     parser = argparse.ArgumentParser(description='Simple HTTP Server Example')
  45.     parser.add_argument('--port', action="store", dest="port", type=int, default=DEFAULT_PORT)
  46.     given_args = parser.parse_args()
  47.     port = given_args.port
  48.     server_address = (DEFAULT_HOST, port)
  49.     server = HTTPServer(server_address, RequestHandler)
  50.     server.serve_forever()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement