Stahování přes FTP pomocí SOCKS a PycURL
Nechte libcurl spravovat řídicí i pasivní datové spojení FTP stahování přes proxy SOCKS5.
PycURL zpřístupňuje podporu FTP a SOCKS z libcurl prostřednictvím jednoho přenosového handle. Při pasivním FTP stahování může aplikace přenechat řídicí spojení i samostatné datové spojení této implementaci.
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 je URL FTP zdroje aplikace a output je již otevřený binární výstupní proud. Časové limity jsou příkladné meze, které je třeba zvolit podle očekávané velikosti souboru a spojení. Pro veřejný FTP zdroj, kde jsou povoleni veřejní prostředníci, nabízí seznam proxy SOCKS5 kandidáty na URL proxy; ověřte, že zvolený uzel povoluje řídicí i pasivní datovou destinaci.
socks5h přenechává překlad cílového názvu hostitele proxy SOCKS. NOPROXY je záměrně prázdné, aby zděděné nastavení prostředí no_proxy neobcházelo trasu tohoto přenosu.
Aktivní FTP ponechte vypnuté: očekává příchozí spojení ze serveru a v tomto režimu proxy není dostupné. Odchozí politika proxy musí povolit řídicí port FTP a pasivní datový port zvolený pro přenos. Úspěšné přihlášení tedy samo o sobě neprokazuje, že soubor lze stáhnout.
Když je potřeba autentizace, použijte PROXYUSERNAME a PROXYPASSWORD z PycURL pro prostředníka; přihlašovací údaje FTP serveru patří k FTP spojení.