Descărcare FTP prin SOCKS cu PycURL
Lăsați libcurl să gestioneze conexiunea de control și conexiunea de date pasivă ale unei descărcări FTP printr-un proxy SOCKS5.
PycURL expune suportul FTP și SOCKS al libcurl printr-un singur handle de transfer. La o descărcare FTP pasivă, aplicația poate lăsa atât conexiunea de control, cât și conexiunea de date separată în seama acelei implementări.
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 este URL-ul resursei FTP a aplicației, iar output este un flux binar de ieșire deja deschis. Timeout-urile sunt limite exemplificative de ales în funcție de dimensiunea fișierului și de conexiunea așteptate. Pentru o resursă FTP publică unde sunt permiși intermediari publici, lista de proxy SOCKS5 oferă candidați pentru URL-ul proxy; verificați că nodul ales permite atât destinația de control, cât și pe cea de date pasivă.
socks5h deleagă rezolvarea numelui gazdei de destinație proxy-ului SOCKS. NOPROXY este gol în mod explicit, astfel încât o setare de mediu no_proxy moștenită să nu ocolească ruta pentru acest transfer.
Lăsați FTP activ dezactivat: așteaptă o conexiune de intrare de la server și nu este disponibil în acest mod de proxy. Politica de ieșire a proxy-ului trebuie să permită portul de control FTP și portul de date pasiv ales pentru transfer. Așadar, doar autentificarea reușită nu dovedește că fișierul poate fi descărcat.
Când este necesară autentificarea, folosiți PROXYUSERNAME și PROXYPASSWORD din PycURL pentru intermediar; datele de autentificare ale serverului FTP aparțin conexiunii FTP.