Isang pag-download ng FTP sa pamamagitan ng SOCKS gamit ang PycURL
Hayaang pangasiwaan ng libcurl ang kontrol at pasibong koneksyon ng data ng isang pag-download ng FTP sa pamamagitan ng SOCKS5 proxy.
Inilalantad ng PycURL ang suporta ng libcurl sa FTP at SOCKS sa pamamagitan ng isang transfer handle. Sa pasibong pag-download ng FTP, maaaring ipaubaya ng aplikasyon ang kontrol na koneksyon at ang hiwalay na koneksyon ng data sa implementasyong iyon.
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()
Ang ftp_url ay ang URL ng FTP resource ng aplikasyon, at ang output ay isang nakabukas nang binary output stream. Ang mga timeout ay halimbawang limitasyong pipiliin ayon sa inaasahang laki ng file at koneksyon. Para sa pampublikong FTP resource kung saan pinapayagan ang mga pampublikong tagapamagitan, nag-aalok ang listahan ng SOCKS5 proxy ng mga kandidato para sa proxy URL; tiyakin na pinapayagan ng napiling node ang kontrol at ang pasibong data na destinasyon.
Ang socks5h ay nagtatalaga ng resolusyon ng hostname ng destinasyon sa SOCKS proxy. Ang NOPROXY ay sadyang walang laman upang ang namamana na setting ng kapaligirang no_proxy ay hindi lalampas sa ruta para sa paglilipat na ito.
Iwanang naka-disable ang aktibong FTP: naghihintay ito ng papasok na koneksyon mula sa server at hindi available sa mode na proxy na ito. Dapat payagan ng papalabas na patakaran ng proxy ang FTP control port at ang pasibong data port na pinili para sa paglilipat. Kaya ang matagumpay na pag-login lamang ay hindi nagpapatunay na maaaring i-download ang file.
Kapag kailangan ang pagpapatunay, gamitin ang PROXYUSERNAME at PROXYPASSWORD ng PycURL para sa tagapamagitan; ang mga kredensyal ng FTP server ay kabilang sa koneksyon ng FTP.