Kapitel 23
Internet-Programmierung
632
23.2.2 Navigieren und Downloaden
Führen Sie im interaktiven Modus Schritt für Schritt eine Session mit einem entfernten
FTP-Server durch. Voraussetzung ist, dass Ihr Rechner online ist. Zunächst stellen Sie eine
Verbindung zu einem FTP-Server her und loggen sich anonym ein.
Mit dem folgenden Kommando lesen Sie den Inhalt des aktuellen Verzeichnisses. Das
Argument
'LIST' ist ein FTP-Kommando, das im FTP-Protokoll (RFC 959) vorgegeben ist.
Die Antwort des FTP-Servers wird direkt in die Standardausgabe geschrieben. Sie besteht
aus dem aktuellen Arbeitsverzeichnis auf dem entfernten Rechner und der Systemmeldung
des FTP-Servers
'226 Directory send OK.'.
Das Verzeichnis besteht aus vielen Textzeilen, die jeweils eine Datei oder ein Unterverzeich-
nis beschreiben. Wenn der erste Buchstabe ein
d ist, handelt es sich um ein Verzeichnis,
sonst um eine Datei. Es folgt eine Beschreibung der Zugriffsrechte für den Besitzer, die
Gruppe und die anderen, am Ende der Zeile steht der Name des Unterverzeichnisses bzw.
der Datei.
Unter Umständen möchte man den Inhalt des Verzeichnisses lokal speichern, um ihn in
irgendeiner Weise zu verarbeiten (siehe folgendes Unterkapitel). In diesem Fall muss man
die Methode
retrlines() mit einem zweiten Argument aufrufen. Dieses enthält den
Namen einer Funktion oder Methode, die auf jede einzelne Zeile angewendet werden soll,
die vom FTP-Server geliefert wird. Im folgenden Dialog erzeugen wir zunächst eine leere
Liste namens
liste und hängen dann alle Zeilen des Verzeichnisses, das der FTP-Server
schickt, an diese Liste. Der komplette Name der Objekt-Methode für dieses Anhängen lautet
retrlines(command
[, callback])
Eine Datei oder Verzeichnis wird im Text-Modus (ASCII-Modus)
heruntergeladen. Das Argument ist ein String mit einem FTP-
Kommando, normalerweise
'RETR dateiname' zum Download
einer Datei oder
'LIST' für das aktuelle Verzeichnis. Das optio-
nale Argument ist der Name einer Funktion mit einem einzigen
String-Parameter. Sie verarbeitet die heruntergeladenen Zeilen
und hängt sie z.B. an eine Liste an. Fehlt das zweite Argument,
werden die Textzeilen über die Standardausgabe (auf dem Bild-
schirm) ausgegeben.
>>> import ftplib
>>> ftp = ftplib.FTP('ftp.uni-koeln.de,
'anonymous', 'ich@meinedomain.de')
>>> ftp.retrlines('LIST')
drwxr-xr-x 3 ftp ftp 2048 Jan 16 2014
adsm'226 Directory send OK.'
Methode Erklärung
Tabelle 23.2: Einige Methoden von Objekten der Klasse
ftplib.FTP (Forts.)
633
23.2
Übertragung von Dateien mit FTP
liste.append. Diesen Namen verwenden wir als zweites Argument im Aufruf der
Methode
retrlines().
Mit der FTP-Methode
cwd() kann man in ein Verzeichnis wechseln. Als Argument gibt
man entweder den absoluten Pfad (er beginnt mit /) oder den relativen Pfad (er beginnt
nicht mit /) an.
Schließlich beenden wir die Verbindung mit der Methode
quit().
Zum Schluss besuchen wir den FTP-Server des Forschungszentrums der Bundesrepublik
Deutschland für Luft- und Raumfahrt (DLR) und laden ein Satellitenfoto herunter. Stellen
Sie die Verbindung her und wechseln Sie in das Verzeichnis mit den Wetterbildern:
Fällt Ihnen etwas auf? Richtig, die Meldungen des FTP-Servers sind etwas anders als die von
der Universität Köln. Lediglich die Nummern sind standardisiert und deshalb immer gleich
(z.B. 226 für den Abschluss eines Downloads).
Sie laden nun eine Bilddatei, z.B. die Datei
1301271048.de.jpg im Binärmodus herunter
und speichern sie in einer lokalen Datei ab. Dazu öffnen Sie zunächst ein File-Objekt im
binären Schreibmodus:
>>> liste = []
>>> ftp.retrlines('LIST', liste.append)
'226 Directory send OK.'
>>> liste
['drwxr-xr-x 3 ftp ftp 2048 Jan 16 2014 adsm',
…]
>>> ftp.cwd('adsm') #relativer Pfad
'250 Directory successfully changed.'
>>> ftp.quit()
'221 Goodbye.'
>>> ftp = ftplib.FTP('taurus.caf.dlr.de', 'anonymous',
'ich@meinedomain.de')
>>> ftp.cwd('/put/wetterbilder/Germany')
'250 CWD command successful'
>>> ftp.retrlines('LIST')
-rw-r--r-- 1 wetterbilder users 158338 Jan 27 12:32 1301271048.de.jpg
-rw-r--r-- 1 wetterbilder users 165300 Jan 27 14:22 1301271228.de.jpg
-rw-r--r-- 1 wetterbilder users 166155 Jan 28 14:12 1301281217.de.jpg
'226 Transfer complete'

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.