PycURL macht libcurls FTP- und SOCKS-Unterstützung über ein einziges Transfer-Handle verfügbar. Bei einem passiven FTP-Download kann die Anwendung sowohl die Steuerverbindung als auch die separate Datenverbindung dieser Implementierung überlassen.

import pycurl

transfer = pycurl.Curl()
try:
    transfer.setopt(pycurl.URL, ftp_url)
    transfer.setopt(pycurl.PROXY, "socks5h://proxy.example.net:1080")
    transfer.setopt(pycurl.NOPROXY, "")
    transfer.setopt(pycurl.WRITEDATA, output)
    transfer.setopt(pycurl.CONNECTTIMEOUT, 10)
    transfer.setopt(pycurl.TIMEOUT, 60)
    transfer.perform()
finally:
    transfer.close()

ftp_url ist die FTP-Ressourcen-URL der Anwendung, und output ist ein bereits geöffneter binärer Ausgabestrom. Die Timeouts sind Beispielgrenzen, die nach erwarteter Dateigröße und Verbindung zu wählen sind. Für eine öffentliche FTP-Ressource, bei der öffentliche Vermittler erlaubt sind, bietet die SOCKS5-Proxy-Liste Kandidaten für die Proxy-URL; prüfen Sie, ob der gewählte Knoten sowohl das Steuer- als auch das passive Datenziel zulässt.

socks5h delegiert die Auflösung des Zielhostnamens an den SOCKS-Proxy. NOPROXY ist ausdrücklich leer, damit eine geerbte no_proxy-Umgebungsvariable die Route für diesen Transfer nicht umgeht.

Lassen Sie aktives FTP deaktiviert: Es erwartet eine eingehende Serververbindung und ist in diesem Proxy-Modus nicht verfügbar. Die Ausgangsrichtlinie des Proxys muss den FTP-Steuerport und den für den Transfer gewählten passiven Datenport zulassen. Ein erfolgreicher Login allein belegt daher nicht, dass die Datei heruntergeladen werden kann.

Wenn eine Authentifizierung nötig ist, verwenden Sie PycURLs PROXYUSERNAME und PROXYPASSWORD für den Vermittler; die Zugangsdaten des FTP-Servers gehören zur FTP-Verbindung.

Ähnliche Artikel