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.

Relaterade artiklar