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.

Súvisiace články