O valoare implicită PySocks nu rerutează ftplib
Urmăriți socketurile pe care ftplib le creează efectiv, în loc să presupuneți că set_default_proxy schimbă implementarea nativă de socket din Python.
socks.set_default_proxy() stochează valori implicite pentru viitoarele obiecte PySocks socksocket. Nu înlocuiește clasa socket nativă din Python. Prin urmare, nu rerutează ftplib doar pentru că apelul are loc înainte de o conexiune FTP.
Urmați constructorii, nu variabila care păstrează URL-ul proxy-ului. ftplib creează o conexiune de control și conexiuni suplimentare de transfer. La FTP pasiv, o autentificare reușită dovedește doar că conexiunea de control a funcționat; socketul de date folosit pentru o listare sau un transfer de fișier are nevoie și el de ruta dorită.
O rețetă care înlocuiește socket.socket sau împachetează un modul face altceva decât să seteze valorile implicite PySocks. Poate afecta alte biblioteci care partajează acel modul. Restabilirea originalului ulterior nu izolează conexiunile simultane de modificare.
O subclasă ftplib personalizată poate acoperi căile de conexiune, dar interiorul copiat poartă presupunerile versiunii Python din care provine, inclusiv sentinele de timeout și gestionarea protocolului. Actualizările bibliotecii standard nu actualizează copia.
Alegeți un client întreținut sau o integrare acceptată pentru proxy-ul și modul FTP necesare. Un exemplu de descărcare FTP pasivă cu PycURL ilustrează o cale de client separată. Pentru o personalizare deținută de aplicație, identificați care constructor deschide fiecare socket de control și de date și păstrați comportamentul upstream pe care îl înlocuiește. O valoare corectă de proxy este utilă doar când acei constructori o folosesc efectiv.