Quicktipp: Temporärer Webserver mit Python

Während der BRUCON 2012 habe ich auch den Python-Workshop von Vivek Ramachandran besucht. Dabei habe ich gelernt, dass in Python ein kleiner Webserver versteckt ist. Es gibt eine Version, die statische Seiten ausliefert und eine Version, die CGI unterstützt. Ich dachte mir damals schon, dass das bestimmt mal nützlich sein könnte.

Wenn ich Artikel für meinen Blog erstelle, schaue ich mir gerne den neuen Artikel an, bevor ich ihn hochlade. Ich kann nun die HTML-Seite aufrufen; aber leider wird dabei die CSS-Datei nicht geladen, so dass ich nur den Text sehe und keine Formatierung.

Ich könnte nun einen Webserver auf meinem Rechner installieren; aber das sieht mir zum Einen nach Overkill aus und wenn ich mal vergesse, ihn zu stoppen, dann habe ich unterwegs ein potentielles Sicherheitsloch.

Als ich heute noch mal darüber nachdachte, fiel mir der Vortrag ein. Und siehe da: mein Problem war gelöst! Was muss man nun genau tun? Ich arbeite zu Hause unter Linux (OpenSUSE) und benutze hier Python 2.7.

Ich wechsle in der Shell in das Verzeichnis, in dem die Blog-Dateien liegen. Dort starte ich den Webserver mit dem Aufruf

python -m BasicHTTPServer 8080

Dadurch wird ein einfacher Webserver gestartet, der auf Port 8080 lauscht. Falls man den Server auf Port 80 lauschen lassen will, muss man den Aufruf als root starten (und natürlich 80 statt 8080 angeben;-)). Interessanterweise kann ich nicht von der normalen Webseite zum Blog wechseln (wenn ich den Server aus dem Verzeichnis mit den Dateien der Webseite starte), da angeblich die Datei index.html nicht gefunden wird; starte ich den Server aber direkt aus dem Blog-Verzeichnis, kann ich auf alle Blog-Artikel wechseln. Es gibt da also noch Einiges zu erforschen.

Das Ganze ist nun nicht die große Entdeckung; aber ich dachte mir, dass jemand das ganz nützlich finden könnte.

Nachtrag:der fehlerhafte Aufruf des Blogs von der lokalen Kopie der Webseite lag daran, dass das Blog-Verzeichnis lokal „Blog“ heisst, im Internet aber „blog“. Nachdem ich den lokalen Verzeichnisnamen angepasst habe, klappt der Aufruf nun auch.

]]>