FTP preuzimanje kroz SOCKS pomoću PycURL-a
Neka libcurl upravlja kontrolnom i pasivnom podatkovnom vezom FTP preuzimanja kroz SOCKS5 proxy.
PycURL izlaže libcurl-ovu podršku za FTP i SOCKS kroz jedan ručki za prijenos. Kod pasivnog FTP preuzimanja aplikacija može i kontrolnu 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 su primjerni limiti koje treba odabrati prema očekivanoj veličini datoteke i vezi. Za javni FTP resurs kod kojeg su javni posrednici dopušteni, lista SOCKS5 proxyja nudi kandidate za proxy URL; provjerite da odabrani čvor dopušta i kontrolno i pasivno podatkovno odredište.
socks5h prepušta razrješavanje imena hosta odredišta SOCKS proxyju. NOPROXY je namjerno prazan kako naslijeđena varijabla okruženja no_proxy ne bi zaobišla rutu za ovaj prijenos.
Ostavite aktivni FTP onemogućen: on očekuje dolaznu vezu sa servera i nije dostupan u ovom načinu rada s proxyjem. Izlazna politika proxyja mora dopuštati FTP kontrolni port i pasivni podatkovni port odabran za prijenos. Zato samo uspješna prijava ne dokazuje da se datoteka može preuzeti.
Kada je potrebna autentikacija, koristite PycURL-ove PROXYUSERNAME i PROXYPASSWORD za posrednika; vjerodajnice FTP servera pripadaju FTP vezi.