Creare un Server HTTP con Python e poche righe di codice

In questo script si crea ed avvia un Server HTTP. CustomHandler estende SimpleHTTPRequestHandler per sovrascrivere il metodo log_message e scrivere i log in un file. La porta può essere specificata come un argomento della riga di comando. Infine, viene utilizzato un blocco try/except per gestire l’errore che si verifica quando la porta è già in uso.

import http.server
import socketserver
import logging
import sys

# Prendi la porta dagli argomenti della riga di comando, se presente

PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8000

class CustomHandler(http.server.SimpleHTTPRequestHandler):
def log_message(self, format, *args):
# Scrive ogni log nel file server.log
with open('server.log', 'a') as file:
file.write("%s - - [%s] %s\n" % (self.address_string(), self.log_date_time_string(), format % args))

# Usa il CustomHandler invece del SimpleHTTPRequestHandler

Handler = CustomHandler

try:
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()
except OSError as e:
print(f"Impossibile avviare il server: {e}")