FTP preuzimanje kroz SOCKS uz PycURL
Neka libcurl upravlja upravljačkom i pasivnom podatkovnom vezom FTP preuzimanja kroz SOCKS5 proxy.
PycURL izlaže libcurlovu podršku za FTP i SOCKS kroz jednu ručku za prijenos. Kod pasivnog FTP preuzimanja aplikacija može i upravljačku vezu i zasebnu podatkovnu vezu prepustiti toj implementaciji.
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 resursa aplikacije, a output je već otvoreni binarni izlazni tok. Vremenska ograničenja primjerni su limiti koje treba odabrati prema očekivanoj veličini datoteke i vezi. Za javni FTP resurs na kojem su dopušteni javni posrednici, popis SOCKS5 proxyja nudi kandidate za proxy URL; provjerite dopušta li odabrani čvor i upravljačko i pasivno podatkovno odredište.
socks5h prepušta razrješavanje imena hosta odredišta SOCKS proxyju. NOPROXY je namjerno prazan kako naslijeđena no_proxy postavka okruženja ne bi zaobišla rutu za ovaj prijenos.
Ostavite aktivni FTP onemogućenim: on očekuje dolaznu vezu sa poslužitelja i nije dostupan u ovom načinu rada s proxyjem. Izlazna politika proxyja mora dopustiti FTP upravljački port i pasivni podatkovni port odabran za prijenos. Stoga sama uspješna prijava ne dokazuje da se datoteka može preuzeti.
Kad je potrebna autentikacija, upotrijebite PycURL-ove PROXYUSERNAME i PROXYPASSWORD za posrednika; vjerodajnice FTP poslužitelja pripadaju FTP vezi.