Daten|teiler
Kopieren als Kulturtechnik

Ein kleiner Webserver mit Python

2. April 2010 von Christian Imhorst

Vielleicht kennt ihr das Problem ja auch: Da will man gerade los und denkt sich, ‘wäre ja schön das neu gekaufte Album unterwegs auf dem Handy zu hören’, oder ‘ich kann ja den Text schnell auf mein Handy laden und unterwegs lesen’, und dann weiß man nicht mehr, wo man das USB-Kabel gelassen hat, das Netbook hat kein Bluetooth und der Bluetooth-Adapter für den USB-Port liegt vermutlich beim verlegten USB-Kabel. Sollte WLAN vorhanden sein, ist das mit Python alles kein Problem. Der folgende Einzeiler startet einen HTTP-Server auf Port 8080 im aktuellen Verzeichnis:

~/Musik$ python -m SimpleHTTPServer 8080

Der Inhalt des Arbeitsverzeichnisses, in diesem Fall der Ordner Musik, wird über den HTTP-Server im internen Netzwerk angeboten, also nicht nur für localhost. Sollte sich im aktuellen Verzeichnis eine Datei wie index.html oder index.htm befinden, würde der Webbrowser ihren Inhalt anzeigen. Da sich solch eine Datei dort aber nicht aufhält, wird der Inhalt des Verzeichnisses angezeigt.

Wenn der Server auf dem Netbook gestartet ist, öffnet man den Webbrowser des Handys. Bei meinem Nokia E71 musste ich dazu den Standardbrowser verwenden, da der Opera Mini sich nicht verbinden wollte. In die Adressleiste gibt man die IP-Adresse des Netbooks im internen Netzwerk gefolgt vom Port an. Die IP-Adresse wird auf jeden Fall anders sein. In meinem Fall ist das:

http://192.168.2.105:8080/

Wenn alles klappt, sieht man den Inhalt des Ordners auf dem Netbook präsentiert vom HTTP-Server:

Man kann sich nun durch die Ordner klicken und die einzelnen Musikstücke herunterladen, allerdings nur immer die einzelnen Dateien, keine kompletten Ordner.

In der Shell kann man dann sehr schön beobachten, mit welcher IP-Adresse das Handy auf die Ordner und Dateien des Servers zugreift:

~/Musik$ python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ...
192.168.2.101 - - [02/Apr/2010 18:37:41] "GET / HTTP/1.1" 200 -
192.168.2.101 - - [02/Apr/2010 18:38:07] "GET /The%20Avett%20Brothers/ HTTP/1.1" 200 -
192.168.2.101 - - [02/Apr/2010 18:38:16] "GET /The%20Avett%20Brothers/I%20And%20Love%20And%20You/ HTTP/1.1" 200 -
192.168.2.101 - - [02/Apr/2010 18:38:23] "GET /The%20Avett%20Brothers/I%20And%20Love%20And%20You/01%20-%20I%20And%20Love%20And%20You.mp3 HTTP/1.1" 200 -

Jetzt möchte man vielleicht eine Datei schnell vom Handy zum Netbook schicken. Das ist mit einem Nokia S60-Modell und Python for Symbian 2.0 kein Problem. Dazu muss folgendes kleine Skript auf dem Telefon gestartet werden:

from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
import os
 
os.chdir("e:\\")
 
serv = HTTPServer(("", 8080), SimpleHTTPRequestHandler)
serv.serve_forever()

Bevor der HTTP-Server auf Port 8080 gestartet wird, wird als Arbeitsverzeichnis “e:\\” vereinbart, was in diesem Fall die Speicherkarte ist. Bevor man den Server aber startet, sollte eine Internetverbindung über WLAN auf dem Handy schon etabliert sein. Am einfachsten surft man dazu mit dem Webbrowser irgendeine Seite an. Nach dem Start blockiert das Skripts allerdings die Python Shell, dafür hat man jetzt die Möglichkeit, den Inhalt der Speicherkarte entlang zu surfen:

Wenn man möchte, kann man einzelne Dokumente herunter laden oder vom Handy aus starten:

Das alles funktioniert, weil bei neueren Python-Versionen das Standardmodul SimpleHTTPServer dabei ist. Da es auf dem Symbian-Handy leider keine Shell und kein Terminal gibt, kann man hier nicht mit der Option “-m” wie zum Beispiel unter Gnu/Linux auf dem Netbook arbeiten. Ein einfacher kurzer Einzeiler reicht hier nicht, man muss eben ein bisschen mehr ausholen. Es gibt übrigens auch die Möglichkeit, Dateien über WLAN mit einem Client- und einem Server-Programm auszutauschen. Aber das ein anderes Mal.

Geschrieben in Gnu/Linux, Python

3 Antworten

  1. Fragensteller

    Möglich, dass das mit einem Surfstick nicht funktioniert?!

  2. Christian Imhorst

    Hi, da ich es nur im internen Netzwerk probiert habe, kann das sehr gut sein…

  3. Detlef

    Danke für den Tipp.