Last active
August 22, 2024 10:37
-
-
Save ricleal/72efc72d7de5e23ce98b9afb2973232a to your computer and use it in GitHub Desktop.
colorized simple echo http server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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...") |
Author
ricleal
commented
Jan 21, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment