Un valor per defecte de PySocks no reconnecta ftplib
Seguiu els sockets que ftplib crea realment en lloc de suposar que set_default_proxy canvia la implementació nativa de socket de Python.
socks.set_default_proxy() desa valors per defecte per als futurs objectes PySocks socksocket. No substitueix la classe socket nativa de Python. Per tant, no redirigeix ftplib només perquè la crida es faci abans d'una connexió FTP.
Seguiu els constructors, no la variable que conté l'URL del proxy. ftplib crea una connexió de control i connexions de transferència addicionals. Amb FTP passiu, un inici de sessió correcte només demostra que la connexió de control ha funcionat; el socket de dades que s'utilitza per a un llistat o una transferència de fitxer també necessita la ruta prevista.
Una recepta que substitueix socket.socket o embolcalla un mòdul fa una altra acció més enllà de definir els valors per defecte de PySocks. Pot afectar altres biblioteques que comparteixen aquest mòdul. Restaurar temporalment l'original després no aïlla les connexions concurrents de la mutació.
Una subclasse personalitzada de ftplib pot cobrir les rutes de connexió, però les interioritats copiades arrosseguen les suposicions de la versió de Python d'on provenen, incloent-hi els sentinelles de temps d'espera i el maneig del protocol. Les actualitzacions de la biblioteca estàndard no actualitzen la còpia.
Trieu un client mantingut o una integració compatible per al proxy i el mode FTP necessaris. Un exemple de baixada FTP passiva amb PycURL il·lustra un camí de client separat. Per a una personalització pròpia de l'aplicació, identifiqueu quin constructor obre cada socket de control i de dades i preserveu el comportament original que substitueix. Un valor de proxy correcte només és útil quan aquests constructors el consumeixen de debò.