PySocks-standardinnstillingen ruter ikke ftplib på nytt
Spor socketene ftplib virkelig oppretter, i stedet for å gå ut fra at set_default_proxy bytter ut Pythons opprinnelige socket-implementasjon.
socks.set_default_proxy() lagrer standardvalg for PySocks-socksocket-objekter som opprettes senere. Den erstatter ikke Pythons opprinnelige socket-klasse. Dermed ruter den ikke ftplib på nytt bare fordi kallet skjer før en FTP-tilkobling opprettes.
Det er konstruktørene du må følge, ikke variabelen som inneholder proxy-URL-en. ftplib oppretter én kontrolltilkobling og i tillegg egne tilkoblinger for overføring. Ved passiv FTP viser en vellykket pålogging bare at kontrolltilkoblingen fungerte; socketen for data som brukes til kataloglisting eller filoverføring må også følge den tiltenkte ruten.
En oppskrift som bytter ut socket.socket eller legger et lag rundt en modul, gjør noe mer enn å sette PySocks-standardvalg. Den kan påvirke andre biblioteker som bruker samme modul. Å sette originalen tilbake etterpå gjør ikke samtidige tilkoblinger uavhengige av endringen.
En egen underklasse av ftplib kan dekke tilkoblingsveiene, men kopiert internkode bærer med seg forutsetningene fra Python-versjonen den ble hentet fra, blant annet sentinelverdier for timeout og håndtering av protokollen. Når standardbiblioteket oppdateres, blir kopien ikke oppdatert.
Velg en klient som vedlikeholdes, eller en integrasjon som støttes, for proxyen og FTP-modusen du trenger. Et eksempel på passiv FTP-nedlasting med PycURL viser en alternativ klientvei. Når tilpasningen eies av applikasjonen, må du finne ut hvilken konstruktør som åpner hver kontrollsocket og hver datasocket, og bevare oppførselen den erstatter. Riktig proxyverdi hjelper bare når konstruktørene faktisk bruker den.