Skip to content

Instantly share code, notes, and snippets.

@mark-jay
Forked from huyng/reflect.py
Last active February 2, 2017 23:51
Show Gist options
  • Select an option

  • Save mark-jay/7c676e0a60aa2a89781a to your computer and use it in GitHub Desktop.

Select an option

Save mark-jay/7c676e0a60aa2a89781a to your computer and use it in GitHub Desktop.
A simple echo server to inspect http web requests
#!/usr/bin/env python
# Reflects the requests from HTTP methods GET, POST, PUT, and DELETE
# Written by Nathan Hamiel (2010)
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from optparse import OptionParser
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
request_path = self.path
print("\n----- Request Start ----->\n")
print(request_path)
print(self.headers)
print("<----- Request End -----\n")
self.send_response(200)
self.send_header("Set-Cookie", "foo=bar")
def do_POST(self):
request_path = self.path
print("\n----- Request Start ----->\n")
print(request_path)
request_headers = self.headers
content_length = request_headers.getheaders('content-length')
length = int(content_length[0]) if content_length else 0
print(request_headers)
print(self.rfile.read(length))
print("<----- Request End -----\n")
self.send_response(200)
do_PUT = do_POST
do_DELETE = do_GET
def main():
port = 8080
print('Listening on localhost:%s' % port)
server = HTTPServer(('', port), RequestHandler)
server.serve_forever()
if __name__ == "__main__":
parser = OptionParser()
parser.usage = ("Creates an http-server that will echo out any GET or POST parameters\n"
"Run:\n\n"
" reflect")
(options, args) = parser.parse_args()
main()
@0snug0
Copy link

0snug0 commented Feb 2, 2017

You should add

self.end_headers()

to line 21 and 38, otherwise you'll get error if you try to proxy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment