FTP-lataus SOCKSin kautta PycURLilla
Anna libcurlin hoitaa FTP-latauksen ohjaus- ja passiivinen datayhteys SOCKS5-välityspalvelimen kautta.
PycURL tarjoaa libcurlin FTP- ja SOCKS-tuen yhden siirto-kahvan kautta. Passiivisessa FTP-latauksessa sovellus voi jättää sekä ohjausyhteyden että erillisen datayhteyden kyseisen toteutuksen hoidettavaksi.
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 on sovelluksen FTP-resurssin URL ja output on jo avattu binäärinen tulostevirta. Aikakatkaisut ovat esimerkkirajoja, jotka valitaan odotetun tiedostokoon ja yhteyden mukaan. Julkiselle FTP-resurssille, jossa julkiset välittäjät ovat sallittuja, SOCKS5-välityspalvelinlista tarjoaa ehdokkaita välityspalvelimen URLiksi; varmista, että valittu solmu sallii sekä ohjaus- että passiivisen datakohteen.
socks5h siirtää kohdekoneen nimen ratkaisun SOCKS-välityspalvelimelle. NOPROXY on tarkoituksella tyhjä, jotta peritty no_proxy-ympäristöasetus ei ohita reittiä tässä siirrossa.
Jätä aktiivinen FTP pois päältä: se odottaa palvelimelta tulevaa yhteyttä eikä ole käytettävissä tässä välityspalvelintilassa. Välityspalvelimen lähtevän liikenteen käytännön on sallittava FTP:n ohjausportti ja siirrolle valittu passiivinen dataportti. Pelkkä onnistunut kirjautuminen ei siis todista, että tiedosto voidaan ladata.
Kun todennus tarvitaan, käytä PycURLin PROXYUSERNAME- ja PROXYPASSWORD-asetuksia välittäjälle; FTP-palvelimen tunnukset kuuluvat FTP-yhteydelle.