Unha descarga FTP a través de SOCKS con PycURL
Deixa que libcurl xestione as conexións de control e de datos pasivos dunha descarga FTP a través dun proxy SOCKS5.
PycURL expón a compatibilidade de libcurl con FTP e SOCKS mediante un único identificador de transferencia. Nunha descarga FTP pasiva, a aplicación pode deixar tanto a conexión de control como a conexión de datos separada a esa implementación.
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 é o URL do recurso FTP da aplicación, e output é un fluxo de saída binario xa aberto. Os tempos de espera son límites de exemplo que se deben escoller segundo o tamaño de ficheiro e a conexión previstos. Para un recurso FTP público onde se permiten intermediarios públicos, a lista de proxies SOCKS5 ofrece candidatos para o URL do proxy; comproba que o nodo elixido permita tanto o destino de control como o de datos pasivos.
socks5h delega a resolución do nome de host de destino no proxy SOCKS. NOPROXY está explicitamente baleiro para que un axuste de ambiente no_proxy herdado non evite a ruta desta transferencia.
Deixa o FTP activo desactivado: espera unha conexión entrante do servidor e non está dispoñible con este modo de proxy. A política de saída do proxy debe permitir o porto de control FTP e o porto de datos pasivos elixido para a transferencia. Polo tanto, un inicio de sesión correcto por si só non demostra que o ficheiro se poida descargar.
Cando se requira autenticación, usa PROXYUSERNAME e PROXYPASSWORD de PycURL para o intermediario; as credenciais do servidor FTP pertencen á conexión FTP.