Skip to content

Instantly share code, notes, and snippets.

@Taisho
Forked from mdonkers/server.py
Created November 22, 2023 08:35
Show Gist options
  • Save Taisho/ec5baff0ad499fe81df0ce9c99b99e80 to your computer and use it in GitHub Desktop.
Save Taisho/ec5baff0ad499fe81df0ce9c99b99e80 to your computer and use it in GitHub Desktop.

Revisions

  1. @mdonkers mdonkers revised this gist Feb 15, 2023. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions server.py
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,7 @@
    #!/usr/bin/env python3
    """
    License: MIT License
    Copyright (c) 2023 Miel Donkers
    Very simple HTTP server in python for logging requests
    Usage::
  2. @mdonkers mdonkers revised this gist Feb 15, 2023. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions server.py
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,7 @@
    #!/usr/bin/env python3
    """
    License: MIT License
    Very simple HTTP server in python for logging requests
    Usage::
    ./server.py [<port>]
  3. Miel Donkers created this gist Mar 29, 2017.
    48 changes: 48 additions & 0 deletions server.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,48 @@
    #!/usr/bin/env python3
    """
    Very simple HTTP server in python for logging requests
    Usage::
    ./server.py [<port>]
    """
    from http.server import BaseHTTPRequestHandler, HTTPServer
    import logging

    class S(BaseHTTPRequestHandler):
    def _set_response(self):
    self.send_response(200)
    self.send_header('Content-type', 'text/html')
    self.end_headers()

    def do_GET(self):
    logging.info("GET request,\nPath: %s\nHeaders:\n%s\n", str(self.path), str(self.headers))
    self._set_response()
    self.wfile.write("GET request for {}".format(self.path).encode('utf-8'))

    def do_POST(self):
    content_length = int(self.headers['Content-Length']) # <--- Gets the size of data
    post_data = self.rfile.read(content_length) # <--- Gets the data itself
    logging.info("POST request,\nPath: %s\nHeaders:\n%s\n\nBody:\n%s\n",
    str(self.path), str(self.headers), post_data.decode('utf-8'))

    self._set_response()
    self.wfile.write("POST request for {}".format(self.path).encode('utf-8'))

    def run(server_class=HTTPServer, handler_class=S, port=8080):
    logging.basicConfig(level=logging.INFO)
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    logging.info('Starting httpd...\n')
    try:
    httpd.serve_forever()
    except KeyboardInterrupt:
    pass
    httpd.server_close()
    logging.info('Stopping httpd...\n')

    if __name__ == '__main__':
    from sys import argv

    if len(argv) == 2:
    run(port=int(argv[1]))
    else:
    run()