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.

Povezani članci