En PySocks-standardværdi omdirigerer ikke ftplib
Følg de sockets, som ftplib faktisk opretter, i stedet for at antage, at set_default_proxy ændrer Pythons indbyggede socket-implementering.
socks.set_default_proxy() gemmer standardværdier til fremtidige PySocks socksocket-objekter. Den erstatter ikke Pythons indbyggede socket-klasse. Derfor omdirigerer den ikke ftplib alene, fordi kaldet sker før en FTP-forbindelse.
Følg konstruktørerne, ikke variablen der holder proxy-URL'en. ftplib opretter en kontrolforbindelse og yderligere transferforbindelser. Ved passiv FTP beviser et vellykket login kun, at kontrolforbindelsen virkede; den datacocket, der bruges til en listevisning eller filoverførsel, har også brug for den tilsigtede rute.
En opskrift, der erstatter socket.socket eller indpakker et modul, udfører en anden handling end at sætte PySocks-standardværdier. Det kan påvirke andre biblioteker, der deler det modul. At gendanne originalen bagefter isolerer ikke samtidige forbindelser fra ændringen.
En tilpasset ftplib-underklasse kan dække forbindelsesvejene, men kopierede indre dele bærer antagelserne fra den Python-udgivelse, de kom fra, herunder timeout-sentineler og protokolhåndtering. Opdateringer af standardbiblioteket opdaterer ikke kopien.
Vælg en vedligeholdt klient eller en understøttet integration til den krævede proxy og FTP-tilstand. Et PycURL-eksempel på passiv FTP-download illustrerer en separat klientvej. For en tilpasning, som applikationen ejer, skal du identificere, hvilken konstruktør der åbner hver kontrol- og datacocket, og bevare den oprindelige adfærd, den erstatter. En korrekt proxyværdi er kun nyttig, når de konstruktører faktisk bruger den.