En FTP-download gennem SOCKS med PycURL
Lad libcurl håndtere kontrol- og passiv dataforbindelse for en FTP-download gennem en SOCKS5-proxy.
PycURL eksponerer libcurls FTP- og SOCKS-understøttelse gennem ét transfer-håndtag. Ved en passiv FTP-download kan programmet overlade både kontrolforbindelsen og den særskilte dataforbindelse til den implementering.
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 er programmets FTP-ressource-URL, og output er en allerede åben binær outputstrøm. Timeouts er eksempelgrænser, der vælges efter den forventede filstørrelse og forbindelse. Til en offentlig FTP-ressource, hvor offentlige mellemled er tilladt, tilbyder SOCKS5-proxy-listen kandidater til proxy-URL'en; kontroller, at den valgte node tillader både kontrol- og den passive datadestination.
socks5h uddelegerer opløsningen af destinationsværtsnavnet til SOCKS-proxyen. NOPROXY er udtrykkeligt tom, så en nedarvet no_proxy-miljøindstilling ikke omgår ruten for denne overførsel.
Lad aktiv FTP være deaktiveret: det forventer en indgående serverforbindelse og er utilgængeligt i denne proxy-tilstand. Proxyens udgående politik skal tillade FTP-kontrolporten og den passive datahavn, der vælges til overførslen. Derfor beviser et vellykket login alene ikke, at filen kan downloades.
Når autentificering er nødvendig, brug PycURLs PROXYUSERNAME og PROXYPASSWORD til mellemleddet; FTP-serverens legitimationsoplysninger hører til FTP-forbindelsen.