Kleiner HTTP-Server für Testzwecke

  Ralf Hersel   Lesezeit: 2 Minuten  🗪 3 Kommentare

Mit dem Python-Modul 'http.server' kommt man schnell zum Ziel.

kleiner http-server für testzwecke

Ab und zu braucht man einen einfachen HTTP-Server, um lokale Webseiten zu testen oder um Dateien freizugeben. Wer keinen eigenen Webserver betreibt oder einen solchen bei einem Hoster laufen hat, kann sich mit einem Handgriff schnell einen solchen starten, ohne mit Apache- oder Nginx-Konfigurationen zu kämpfen.

Für diese Anforderung bietet die eierlegende Wollmilchsau Python eine Lösung in Form des Moduls 'http.server'. Mit einem Kommando lässt sich ein lokaler Webserver starten:

python3 -m http.server 9000

Python bietet die Möglichkeit ein Modul mit dem Parameter '-m' direkt aufzurufen, ohne dafür ein Skript zu schreiben. Optional kann ein Port (im Beispiel: 9000) angegeben werden; ansonsten lauscht der Server auf Port 8000. Das Python Modul 'http.server' verwendet das aktuelle Arbeitsverzeichnis als Web-Root. Daher empfiehlt es sich, den Befehl aus einem bestimmten Verzeichnis heraus zu starten. Hier ein Beispiel: in meinem Verzeichnis 'Dokumente' befinden sich allerlei Test-Dateien, sowie eine 'index.html'.

[ralf@ralf Dokumente]$ ls
acht.txt  apostrophe.md  demo.html  demo.md  eins.txt  index.html  sub  test.DAT  test.LCK  test.pdf
[ralf@ralf Dokumente]$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Ruft man nun im Webbrowser die angegebene Adresse auf, wird die Datei 'index.html' angezeigt:

Sollte die 'index.html' fehlen, erhält man ein Directory Listing:

Diese schnelle und einfache Lösung bietet sich nur für lokale und unkritische Tests an und sollte auf gar keinen Fall für produktive Systeme verwendet werden. Der kleine Webserver kann auch von ausserhalb des LANs erreicht werden, vorausgesetzt man öffnet im Router die IP und den Port. Davon rate ich aus Sicherheitsgründen dringend ab.

Tags

HTTP-Server, Webserver, Python, Port, Server, Modul

Torsten
Geschrieben von Torsten am 20. Oktober 2021 um 13:08

Das ist ja nett... Zuhause Netzintern nutze ich Flask. Das lässt sich prima in Scripte einbinden zur z.B. Hausautomatisierung.

https://de.wikipedia.org/wiki/Flask

tux.
Geschrieben von tux. am 20. Oktober 2021 um 17:30

"Schnell und einfach". Naja. Python ist schon umfangreicher als manche Webserversoftware und lahmarschiger obendrein.

(Bessere, weil performantere Sprachen mit HTTP in der Basis: Racket und Go. Allerdings brauchen beide etwas mehr Code für dasselbe Ergebnis.)

Jens T.
Geschrieben von Jens T. am 20. Oktober 2021 um 18:33

Wenn man für Tests diesen Python-Server nicht gleich für das ganze lokale Netzwerk öffnen will, kann man den Server auch an die lokale Schnittstelle binden:

python3 -m http.server --bind 127.0.0.1 8000