PycURL atskleidžia libcurl FTP ir SOCKS palaikymą per vieną perdavimo rankeną. Pasijungus pasyviajam FTP atsisiuntimui, programa gali palikti ir valdymo ryšį, ir atskirą duomenų ryšį tai realizacijai.

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 yra programos FTP šaltinio URL, o output – jau atidarytas dvejetainis išvesties srautas. Skirtieji laikai yra pavyzdinės ribos, kurias reikia pasirinkti pagal numatomą failo dydį ir ryšį. Viešajam FTP šaltiniui, kuriame leidžiami vieši tarpininkai, SOCKS5 tarpinių serverių sąrašas siūlo kandidatus tarpinio serverio URL; patikrinkite, ar pasirinktas mazgas leidžia ir valdymo, ir pasyvųjį duomenų adresą.

socks5h paveda paskirties hosto vardo sprendimą SOCKS tarpiniam serveriui. NOPROXY sąmoningai tuščias, kad paveldėtas no_proxy aplinkos nustatymas neaplenktų šio perdavimo maršruto.

Palikite aktyvų FTP išjungtą: jis laukia įeinančio serverio ryšio ir šiame tarpinio serverio režime nepasiekiamas. Tarpinio serverio išėjimo politika turi leisti FTP valdymo prievadą ir perdavimui pasirinktą pasyvųjį duomenų prievadą. Todėl vien sėkmingas prisijungimas neįrodo, kad failą galima atsisiųsti.

Kai reikia autentifikacijos, tarpininkui naudokite PycURL PROXYUSERNAME ir PROXYPASSWORD; FTP serverio kredencialai priklauso FTP ryšiui.

Susiję straipsniai