Una baixada FTP a través de SOCKS amb PycURL
Deixeu que libcurl gestioni les connexions de control i de dades passives d'una baixada FTP a través d'un proxy SOCKS5.
PycURL exposa el suport FTP i SOCKS de libcurl mitjançant un sol identificador de transferència. En una baixada FTP passiva, l'aplicació pot deixar tant la connexió de control com la connexió de dades separada a aquesta implementació.
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 és l'URL del recurs FTP de l'aplicació, i output és un flux de sortida binari ja obert. Els temps d'espera són límits d'exemple que cal triar segons la mida de fitxer i la connexió previstes. Per a un recurs FTP públic on es permeten intermediaris públics, la llista de proxys SOCKS5 ofereix candidats per a l'URL del proxy; comproveu que el node triat permeti tant la destinació de control com la de dades passives.
socks5h delega la resolució del nom d'amfitrió de destinació al proxy SOCKS. NOPROXY és explícitament buit perquè un paràmetre d'entorn no_proxy heretat no desviï la ruta d'aquesta transferència.
Deixeu l'FTP actiu desactivat: espera una connexió entrant del servidor i no està disponible amb aquest mode de proxy. La política de sortida del proxy ha de permetre el port de control FTP i el port de dades passives triat per a la transferència. Per tant, un inici de sessió correcte no demostra per si sol que el fitxer es pugui baixar.
Quan calgui autenticació, feu servir PROXYUSERNAME i PROXYPASSWORD de PycURL per a l'intermediari; les credencials del servidor FTP pertanyen a la connexió FTP.