Come creare un server web con python in poche righe di codice.

ALTRO, APPUNTI, INFORMATICA

Una delle cose che fa perdere più tempo quando si lavora per fare un test o un piccolo prototipo è la creazione e configurazione degli ambienti;  ad esempio se si lavora su software che richiede di avere a disposizione un web server per fare dei test a volte si è costretti a scaricare un ambiente completo ed installare ad esempio apache o nginx e spendere anche del tempo per configurare opportunamente le cose, quando  magari per le  esigenze di test servirebbe solamente un server web veramente basico e soprattuto da non configurare, in tal caso  una via semplicissima è quella di usare python lanciando da shell nella directory che volete far diventare la vostra DocumentRoot il seguente comando

python3 -m http.server

questa semplice operazione  istanzierà un web server sulla porta di default 8000. Qualora fosse già occupata potrete usare la seguente sintassi:

python3 -m http.server  <portNumber>

Ma cosa succede se per i vostri test dovesse servirvi un server https?  con altrettante poche righe di codice potreste usare ancora python.

Di seguito vi lascio lo script che uso per semplici test in cui viene richiesta la connessione https ad esempio nel caso  di alcune librerie (vedi ad esempi getUserMedia per WebRTC)  il browser supporta solo https. A questo link potete trovare il codice funzionate ed anche il certificato di test.

from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl

pathFileKeyPem = './test-keys/key.pem'
pathFileCertPem = './test-keys/cert.pem'
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):

   def do_GET(self):
      self.send_response(200)
      self.end_headers()
   try:
      file = open("./" + str(self.path), 'rb')
      self.wfile.write(file.read())
   except:
      print("An exception occurred loading" + str(self.path))


httpd = HTTPServer(('0.0.0.0', 4443), SimpleHTTPRequestHandler)

httpd.socket = ssl.wrap_socket (httpd.socket, 
         keyfile=pathFileKeyPem, 
         certfile=pathFileCertPem, server_side=True)

httpd.serve_forever()


Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form