Skip to content

Instantly share code, notes, and snippets.

@ricleal
Last active January 21, 2024 15:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ricleal/72efc72d7de5e23ce98b9afb2973232a to your computer and use it in GitHub Desktop.
Save ricleal/72efc72d7de5e23ce98b9afb2973232a to your computer and use it in GitHub Desktop.
colorized simple echo http server
#!/usr/bin/env python3
'''
start as: http_server.py -p 8080
'''
from email import header
import http.server
import socketserver
import argparse
import sys
# Enable colored output on Windows terminals
if sys.platform == "win32":
import colorama
colorama.init()
# Define ANSI color codes for formatting
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
class ColoredHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
print(f"{bcolors.OKBLUE}{self.command}{bcolors.ENDC} {bcolors.HEADER}{self.path}{bcolors.ENDC} {bcolors.OKGREEN}{self.request_version}{bcolors.ENDC}")
# iterate and color headers
for k, v in self.headers.items():
print(f"{bcolors.OKCYAN}{k}{bcolors.ENDC}: {bcolors.BOLD}{v}{bcolors.ENDC}")
self.send_response(200)
self.end_headers()
def do_POST(self):
print(f"{bcolors.OKBLUE}{self.command}{bcolors.ENDC} {bcolors.HEADER}{self.path}{bcolors.ENDC} {bcolors.OKGREEN}{self.request_version}{bcolors.ENDC}")
# iterate and color headers
for k, v in self.headers.items():
print(f"{bcolors.OKCYAN}{k}{bcolors.ENDC}: {bcolors.BOLD}{v}{bcolors.ENDC}")
request_headers = self.headers
content_length = request_headers.get('Content-Length')
length = int(content_length) if content_length else 0
print(f"\n{bcolors.BOLD}{self.rfile.read(length).decode('utf8')}{bcolors.ENDC}")
self.send_response(200)
self.end_headers()
do_PUT = do_POST
do_DELETE = do_GET
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Simple HTTP server with colored output")
parser.add_argument("-p", "--port", type=int, default=8000, help="Port to listen on")
args = parser.parse_args()
with socketserver.TCPServer(("", args.port), ColoredHTTPRequestHandler) as httpd:
print(f"Serving on port {args.port}...")
try:
httpd.serve_forever()
except KeyboardInterrupt:
print("\nServer shutting down...")
@ricleal
Copy link
Author

ricleal commented Jan 21, 2024

image

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