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.

Povezani članci