En FTP-nedladdning via SOCKS med PycURL
Låt libcurl hantera kontroll- och den passiva dataförbindelsen för en FTP-nedladdning via en SOCKS5-proxy.
PycURL exponerar libcurls FTP- och SOCKS-stöd genom ett enda överföringshandtag. Vid en passiv FTP-nedladdning kan programmet överlåta både kontrollförbindelsen och den separata dataförbindelsen till den implementeringen.
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 är programmets FTP-resurs-URL, och output är en redan öppnad binär utström. Tidsgränserna är exempelgränser som väljs efter förväntad filstorlek och anslutning. För en offentlig FTP-resurs där offentliga mellanhänder tillåts erbjuder SOCKS5-proxylistan kandidater för proxy-URL:en; kontrollera att den valda noden tillåter både kontroll- och den passiva datadestinationen.
socks5h delegerar upplösningen av målvärdnamnet till SOCKS-proxyn. NOPROXY är uttryckligen tomt så att en ärvd no_proxy-miljöinställning inte kringgår rutten för den här överföringen.
Låt aktiv FTP vara inaktiverat: det väntar på en inkommande serveranslutning och är inte tillgängligt i det här proxy-läget. Proxyns utgående policy måste tillåta FTP-kontrollporten och den passiva dataport som valts för överföringen. Ett lyckat login bevisar därför inte i sig att filen kan laddas ner.
När autentisering behövs, använd PycURLs PROXYUSERNAME och PROXYPASSWORD för mellanhanden; FTP-serverns uppgifter hör till FTP-anslutningen.