#!/usr/bin/env python3 #https://gist.github.com/bradmontgomery/2219997 """ Very simple HTTP server in python (Updated for Python 3.7) Usage: ./dummy-web-server.py -h ./dummy-web-server.py -l localhost -p 8000 Send a GET request: curl http://localhost:8000 Send a HEAD request: curl -I http://localhost:8000 Send a POST request: curl -d "foo=bar&bin=baz" http://localhost:8000 """ import argparse import time import socket from http.server import HTTPServer, BaseHTTPRequestHandler class Handler(BaseHTTPRequestHandler): def handle_one_request(self): """Handle a single HTTP request. You normally don't need to override this method; see the class __doc__ string for information on how to handle specific HTTP commands such as GET and POST. """ try: self.raw_requestline = self.rfile.readline(65537) if len(self.raw_requestline) > 65536: self.requestline = '' self.request_version = '' self.command = '' self.send_error(414) return if not self.raw_requestline: self.close_connection = 1 return if not self.parse_request(): # An error code has been sent, just exit return mname = 'do_' + self.command if not hasattr(self, mname): self.send_error(501, "Unsupported method (%r)" % self.command) return method = getattr(self, mname) method() #add verification of wfile is closed or not if not self.wfile.closed: # actually send the response if not already done. self.wfile.flush() except socket.timeout as e: #a read or a write timed out. Discard this connection self.log_error("Request timed out: %r", e) self.close_connection = 1 return def _set_headers(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() def _html(self, message): """This just generates an HTML document that includes `message` in the body. Override, or re-write this do do more interesting stuff. """ content = "