Sťahovanie FTP cez SOCKS pomocou PycURL
Nechajte libcurl spravovať riadiace aj pasívne dátové spojenie FTP sťahovania cez proxy SOCKS5.
PycURL sprístupňuje podporu FTP a SOCKS z libcurl prostredníctvom jedného prenosového handle. Pri pasívnom FTP sťahovaní môže aplikácia prenechať riadiace spojenie aj samostatné dátové spojenie tejto implementácii.
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 zdroja aplikácie a output je už otvorený binárny výstupný prúd. Časové limity sú príkladné hranice, ktoré treba zvoliť podľa očakávanej veľkosti súboru a spojenia. Pre verejný FTP zdroj, kde sú povolení verejní sprostredkovatelia, ponúka zoznam proxy SOCKS5 kandidátov na URL proxy; overte, že zvolený uzol povoľuje riadiacu aj pasívnu dátovú destináciu.
socks5h prenecháva preklad cieľového názvu hostiteľa proxy SOCKS. NOPROXY je zámerne prázdne, aby zdedené nastavenie prostredia no_proxy neobchádzalo trasu tohto prenosu.
Aktívne FTP ponechajte vypnuté: očakáva prichádzajúce spojenie zo servera a v tomto režime proxy nie je dostupné. Odchádzajúca politika proxy musí povoliť riadiaci port FTP a pasívny dátový port zvolený pre prenos. Úspešné prihlásenie teda samo o sebe nepreukazuje, že súbor možno stiahnuť.
Keď je potrebná autentifikácia, použite PROXYUSERNAME a PROXYPASSWORD z PycURL pre sprostredkovateľa; prihlasovacie údaje FTP servera patria k FTP spojeniu.