Skip to content

Datenabholung von FTP/FTPS/SFTP/HTTP/HTTPS

Die Datenabholung erlaubt das Herunterladen von Dateien von FTP/FTPS/SFTP/HTTP/HTTPS-Servern.

Zur Übertragung von FTP/FTPS/SFTP-Servern wird eine INI-Datei mit der Sektion ftp_in verwendet.

Zur Übertragung von HTTP/HTTPS-Servern (Webservern) wird eine INI-Datei mit der Sektion web_in verwendet. Dabei werden verschiedene Webseiten mit der INI-Sektion url angegeben.

powershell
python prozessing.pyz ftp_in_xxxx.ini
python prozessing.pyz web_in_xxxx.ini

INI-Datei: ftp_in

ini
[ftp_in]

ftp_type = ftp|sftp    # Typ der FTP Übertragung ftp (unverschlüsselt) oder sftp (ftp über ssh)
#ftp_method = Net_SSH2 # alternative Methode für ftp_type = sftp (Standardmethode ist plink)
server =               # Servername des Zielservers
port =                 # Port des Serverzugangs (default 21)
user =                 # Benutzername des Serverzugangs am Zielserver
pass =                 # Kennwort des Serverzugangs (wird nicht benötigt, falls ftp_type = sftp und key_file gesetzt ist)
key_file =             # Datei mit ssh-private key falls die Datei per private key Anmeldung und per ftp_type = sftp übertragen wird
key_type = ssh-rsa|ssh-ecdsa|ssh-ed25519 # Optionale Angabe des SSH-Key-typs
list_method = mlsd|list|nlst # Listing-Methode für FTP, (default: mlsd)
encoding = utf-8       # Encoding für Listing
ftp_encoding = utf-8|ansi # Encoding für die FTP Verbindung (default utf-8)
rename_temp = 0|1      # Upload als .tmp mit darauffolgendem Rename (default)
subdir =               # Unterverzeichnis am FTP-Server
to =                   # Unterverzeichnis lokal
regex =                # Regulärer Ausdruck zur Filterung
glob =                 # Unix-Shell-ähnliche Platzhalter zur Filterung
delete_remote = 0|1    # 0: nicht löschen, 1: löschen nach Übertragung
MaxAgeSeconds =        # OPTIONAL: Maximales Alter der Datei in Sekunden
MinAgeSeconds =        # OPTIONAL: Mindestalter der Datei (es zählt der Modification Zeitstempel)
                       # um ein Abschneiden der Datei zu verhindern, die gerade noch am FTP-Server geschrieben wird
MinSize =              # Mindestgröße der Datei in Bytes
MaxSize =              # Maximalgröße der Datei in Bytes
binary = 0|1           # 1: Datei wird binär übertragen (default)
passive = 0|1          # 1: ftp passive mode verwenden
fw = 0|1               # 1: ein lokaler proxy Server soll verwendet werden
fw_server =            # Servername des proxy Servers
fw_user =              # Benutzername des proxy Servers
fw_pass =              # Kennwort des proxy Servers
fw_quot =              # FTP QUOT Command falls der typ des proxy Servers dies verlangt
retry = n              # Anzahl der Versuche (nur für sftp)
gunzip = 0|1           # 1: .gz/.zip komprimierte Datei bei Abholung transparent entpacken
host_key =             # Angabe eines fingerprint host keys known_hosts (ohne Angabe erfolgt keine Prüfung)
UNQ = 0|1              # 1: die Quelldatei wird eindeutig gemacht (für den Fall, dass der Lieferant immer den selben Dateinamen schickt)

INI-Datei: web_in

ini
[web_in]
# Optionale Angabe von Kommentaren in der Steuerdatei
;

# Optionale Angabe eines http oder https proxy Servers
#fw_server =

# Angabe von mehreren URLS von denen Daten eingesammelt werden sollen
url =
    http://www.example1.com/foo.txt
    http://www.example2.com/foo.txt

# Angabe von mehreren URLS mit eindeutigem lokalen Dateinamen mittels Variable {now}
url =
    16991991_Q_X_{now}.zrx::https://www.daten.bayern.de/webservices/export.php?abfrageX
    16991991_Q_Y_{now}.zrx::https://www.daten.bayern.de/webservices/export.php?abfrageY

# Angabe von nur einer URL
url = http://www.example1.com/foo.txt

# Platzhalter, die in URLS ausgewertet werden
# - {time} UNIX Zeitstempel in s
# - {time-10800} UNIX Zeitstempel in s minus Zeitangabe in s
# - {DD}   aktueller Tag (00..31) zur Laufzeit des Programms

# Angabe mit URL-Präfix (dieses wird vor jede URL angehängt)
url_prefix = http://www.example1.com
url =
    /foo.txt
    /bar.txt

# Alternative technische Methode zur Abholung auf basis curl
#method = curl
#insecure = 1 # erlaubt unsichere SSL-Verbindungen zu nutzen

# Zielverzeichnis für die abgeholten Daten
to =

Folgende Platzhalter werden für subdir, to, url unterstützt:

PlatzhalterBeschreibung
{date}Datum als YYYY-MM-DD
{now}Datum als YYYYMMDDhhmmss
{DD}Datum als DD
{yyyy}Datum als YYYY
{yyyy/mm±offset}Datum als YYYY/MM mit Offset in Tagen
{yyyy-mm±offset}Datum als YYYY-MM mit Offset in Tagen
{iso8601±offset}Datum als YYYY-MM-DDThh:mm:ss mit Offset in Sekunden
{zrxptime±offset}Datum als YYYYMMDDhhmmss mit Offset in Sekunden
{time±offset}Datum als UNIX-Zeitstempel mit Offset in Sekunden

INI-Beispiele

einfache FTP-Abholung von csv Dateien

ini
[ftp_in]
server = ftp.example.com
user = yyyyyy
pass = XXXXXXXXXXXX
subdir = .
to = D:/Datenmanagement/spool/irr_hach
regex = csv
delete_remote = 1

FTP-Abholung von zrxp Dateien aus mehreren FTP Ordnern

ini
[ftp_in]
server = ftp.example.at
user = yyyyyy
pass = XXXXXXXXXXXX
subdir =
    /Daten/Seen
    /Daten/Pegel
to = D:/DatenKaprun/spool/ftp_zrxp
regex = zrxp
delete_remote = 1

FTP-Abholung via proxy und user-syntax: user@ziel.server.com

ini
[ftp_in]
server = proxy.example.com
user = user_abc@www.winter.at
pass = YYYYYYYYYYYYYYY
subdir = .
to = D:/IMPORT/spool/daten
regex = .csv
delete_remote = 1
fw =
list_method = list

SFTP-Abholung von Dateien

ini
[ftp_in]
ftp_type = sftp
server = ftp.example.com
user = yyyyyy
pass = DDDDDDDDDDDDDD
subdir = /www/htdocs/YYYYYY/spool
to = D:/Datenmanagement/spool
regex = 00005707
host_key = known_hosts.example.com

HTTP-Abholung via ZRXP (Zieldateiname wird vor URL angegeben)

ini
[web_in]
url =
    TIROL_299251_W.zrxp::https://apps.tirol.gv.at/hydro/datenaustausch/xchange.pl?pgnr=299251&user=YYYYYY&pass=XXXXXXXXXXX&werte=W&diskr=15&modus=zrx
    TIROL_299036_W.zrxp::https://apps.tirol.gv.at/hydro/datenaustausch/xchange.pl?pgnr=299036&user=YYYYYY&pass=XXXXXXXXXXX&werte=W&diskr=15&modus=zrx
to = C:\tbbm
ZRXP = 1

HTTP-Abholung Webseite des BAFU, direkte Datei

ini
[web_in]
url =
    http://www.hydrodaten.admin.ch/graphs/2139/temperature_2139.csv
    http://www.hydrodaten.admin.ch/graphs/2139/discharge_2139.csv
to = C:\tbbm

https Schnittstelle Land Vorarlberg, start und end muss in Millisekunden seit 1970-01-01 angegeben werden

ini
[web_in]
url =
    BANGS_WASSERSTAND.csv::https://vowis.vorarlberg.at/DownloadTool/dlt_DownloadWasserstand.php?start={time-10800}&end={time}&id0=V334714
    BANGS_ABFLUSS.csv::https://vowis.vorarlberg.at/DownloadTool/dlt_DownloadAbfluss.php?start={time-10800}&end={time}&id0=V334714
    LUSTENAU_WASSERSTAND.csv::https://vowis.vorarlberg.at/DownloadTool/dlt_DownloadWasserstand.php?start={time-10800}&end={time}&id0=V334711
    LUSTENAU_ABFLUSS.csv::https://vowis.vorarlberg.at/DownloadTool/dlt_DownloadAbfluss.php?start={time-10800}&end={time}&id0=V334711
to = F:/Datenmanagement/spool/irr_hdvvowis

HTTP-Abholung Alpenwetterbericht von DWD, direkte Datei

ini
[web_in]
fw_server = http://proxy.tirol.gv.at:8080/
method = curl
url = https://data.dwd.de/data/Alpenwetterbericht.txt
user = yyyyyy
pass = DDDDDDDDDDDDDD
to = C:\tbbm

HTTP-Abholung per curl mit Option --insecure

ini
[web_in]
url = 16991991_Q_{now}.zrx::https://www.daten.bayern.de/webservices/export.php
to = D:/Daten/spool
fw_server = http://proxy.server.at:8080
method = curl
insecure = 1

HTTP-Abholung per curl mit Option --header

ini
[web_in]
url = https://httpbin.org/headers
header = Authorization: foobar
to = ...
method = curl

HTTP-Abholung per curl mit OAuth2 password grant: HTTP POST https://api.example.com/oauth/token liefert {"access_token":"xyz"}. Dieses wird dann als Authorization: Bearer xyz in HTTP GET https://example.com/protected verwendet.

ini
[web_in]
url = https://example.com/protected
to = ...
method = curl
oauth_token_url = https://api.example.com/oauth/token
oauth_token_data =
	grant_type=password
	client_id=...
	client_secret=...
	username=...
	password=...

disabled_algorithms

ini
[ftp_in]
ftp_type = sftp
# ...

[disabled_algorithms]
pubkeys =
  rsa-sha2-256
  rsa-sha2-512

# oder
[disabled_algorithms]
ciphers =
  aes128-ctr
  aes192-ctr
  aes256-ctr
  aes128-cbc
  aes192-cbc
  aes256-cbc
  3des-cbc

macs =
  hmac-sha2-256
  hmac-sha2-512
  hmac-sha2-256-etm@openssh.com
  hmac-sha2-512-etm@openssh.com
  hmac-sha1
  hmac-md5
  hmac-sha1-96
  hmac-md5-96

keys =
  ssh-ed25519
  ecdsa-sha2-nistp256
  ecdsa-sha2-nistp384
  ecdsa-sha2-nistp521
  rsa-sha2-512
  rsa-sha2-256
  ssh-rsa
  ssh-dss

pubkeys =
  ssh-ed25519
  ecdsa-sha2-nistp256
  ecdsa-sha2-nistp384
  ecdsa-sha2-nistp521
  rsa-sha2-512
  rsa-sha2-256
  ssh-rsa

kex =
  ecdh-sha2-nistp256
  ecdh-sha2-nistp384
  ecdh-sha2-nistp521
  diffie-hellman-group16-sha512
  diffie-hellman-group-exchange-sha256
  diffie-hellman-group14-sha256
  diffie-hellman-group-exchange-sha1
  diffie-hellman-group14-sha1
  diffie-hellman-group1-sha1