PycURL izlaže libcurl-ovu podršku za FTP i SOCKS kroz jednu ručku za prenos. 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 primerni limiti koje treba odabrati prema očekivanoj veličini datoteke i vezi. Za javni FTP resurs kod kojeg su javni posrednici dozvoljeni, lista SOCKS5 proxyja nudi kandidate za proxy URL; proverite da odabrani čvor dozvoljava i kontrolno i pasivno podatkovno odredište.

socks5h prepušta razrešavanje imena hosta odredišta SOCKS proxyju. NOPROXY je namerno prazan kako nasleđena no_proxy varijabla okruženja ne bi zaobišla rutu za ovaj prenos.

Ostavite aktivni FTP onemogućen: on očekuje dolaznu vezu sa servera i nije dostupan u ovom režimu sa proxyjem. Izlazna politika proxyja mora dozvoliti FTP kontrolni port i pasivni podatkovni port odabran za prenos. Zato samo uspešna prijava ne dokazuje da se datoteka može preuzeti.

Kada je potrebna autentikacija, koristite PycURL-ove PROXYUSERNAME i PROXYPASSWORD za posrednika; akreditive FTP servera pripadaju FTP vezi.

Povezani članci