PySocks noklusējums nepārslēdz ftplib
Sekojiet socketiem, ko ftplib faktiski izveido, nevis pieņemiet, ka set_default_proxy maina Python vietējo socket ieviešanu.
socks.set_default_proxy() saglabā noklusējumus turpmākiem PySocks socksocket objektiem. Tas neaizstāj Python vietējo socket klasi. Tāpēc tas nepārvirza ftplib tikai tāpēc vien, ka izsaukums notiek pirms FTP savienojuma.
Sekojiet konstruktoriem, nevis mainīgajam, kurā glabājas proxy URL. ftplib izveido vadības savienojumu un papildu pārsūtīšanas savienojumus. Pasīvajā FTP veiksmīga pieteikšanās pierāda tikai to, ka vadības savienojums strādāja; arī datu socket, ko izmanto saraksta vai faila pārsūtīšanai, ir jāiet paredzētajā maršrutā.
Recepte, kas aizstāj socket.socket vai ietin moduli, veic citu darbību, nevis PySocks noklusējumu iestatīšanu. Tā var ietekmēt citas bibliotēkas, kas izmanto šo pašu moduli. Vēlāka oriģināla atjaunošana nepadara vienlaicīgos savienojumus izolētus no izmaiņām.
Pielāgota ftplib apakšklase var aptvert savienojumu ceļus, taču nokopētā iekšējā loģika nes sev līdzi tās Python versijas pieņēmumus, no kuras tā nāk, tostarp taimauta sentineļus un protokola apstrādi. Standartbibliotēkas atjauninājumi kopiju neatjaunina.
Izvēlieties uzturētu klientu vai atbalstītu integrāciju vajadzīgajam proxy un FTP režīmam. PycURL pasīvā FTP lejupielādes piemērs parāda atsevišķu klienta ceļu. Ja pielāgojums pieder lietotnei, nosakiet, kurš konstruktors atver katru vadības un datu socketu, un saglabājiet sākotnējo uzvedību, ko tas aizstāj. Pareiza proxy vērtība ir noderīga tikai tad, ja šie konstruktori to faktiski izmanto.