Μια προεπιλογή του PySocks δεν ανακατευθύνει το ftplib
Παρακολουθήστε τα socket που δημιουργεί στην πραγματικότητα το ftplib αντί να υποθέτετε ότι το set_default_proxy αλλάζει την εγγενή υλοποίηση socket της Python.
Το socks.set_default_proxy() αποθηκεύει προεπιλογές για μελλοντικά αντικείμενα PySocks socksocket. Δεν αντικαθιστά την εγγενή κλάση socket της Python. Επομένως, δεν ανακατευθύνει το ftplib μόνο και μόνο επειδή η κλήση γίνεται πριν από μια σύνδεση FTP.
Ακολουθήστε τους κατασκευαστές, όχι τη μεταβλητή που κρατά το URL του διακομιστή μεσολάβησης. Το ftplib δημιουργεί μια σύνδεση ελέγχου και πρόσθετες συνδέσεις μεταφοράς. Στο παθητικό FTP, μια επιτυχημένη σύνδεση αποδεικνύει μόνο ότι λειτούργησε η σύνδεση ελέγχου· το socket δεδομένων που χρησιμοποιείται για μια λίστα ή μια μεταφορά αρχείου χρειάζεται επίσης τη σωστή διαδρομή.
Μια συνταγή που αντικαθιστά το socket.socket ή τυλίγει ένα module εκτελεί άλλη ενέργεια πέρα από τον ορισμό προεπιλογών του PySocks. Μπορεί να επηρεάσει άλλες βιβλιοθήκες που μοιράζονται αυτό το module. Η προσωρινή επαναφορά του αρχικού αργότερα δεν απομονώνει τις ταυτόχρονες συνδέσεις από την αλλαγή.
Μια προσαρμοσμένη υποκλάση του ftplib μπορεί να καλύψει τις διαδρομές σύνδεσης, αλλά τα αντιγραμμένα εσωτερικά φέρουν τις παραδοχές της έκδοσης Python από την οποία προήλθαν, συμπεριλαμβανομένων των δεικτών χρονικού ορίου και του χειρισμού πρωτοκόλλου. Οι ενημερώσεις της τυπικής βιβλιοθήκης δεν ενημερώνουν το αντίγραφο.
Επιλέξτε έναν συντηρούμενο πελάτη ή μια υποστηριζόμενη ενσωμάτωση για τον απαιτούμενο διακομιστή μεσολάβησης και λειτουργία FTP. Ένα παράδειγμα λήψης με παθητικό FTP μέσω PycURL δείχνει μια ξεχωριστή διαδρομή πελάτη. Για μια προσαρμογή που ανήκει στην εφαρμογή, προσδιορίστε ποιος κατασκευαστής ανοίγει κάθε socket ελέγχου και δεδομένων και διατηρήστε τη συμπεριφορά της ανάντη βιβλιοθήκης που αντικαθιστά. Μια σωστή τιμή διακομιστή μεσολάβησης είναι χρήσιμη μόνο όταν αυτοί οι κατασκευαστές την καταναλώνουν πραγματικά.