Λήψη FTP μέσω SOCKS με το PycURL
Αφήστε το libcurl να χειρίζεται τη σύνδεση ελέγχου και τη σύνδεση παθητικών δεδομένων μιας λήψης FTP μέσω διακομιστή μεσολάβησης SOCKS5.
Το PycURL εκθέτει την υποστήριξη FTP και SOCKS του libcurl μέσω μιας λαβής μεταφοράς. Σε μια παθητική λήψη FTP, η εφαρμογή μπορεί να αφήσει τόσο τη σύνδεση ελέγχου όσο και την ξεχωριστή σύνδεση δεδομένων σε αυτή την υλοποίηση.
import pycurl
transfer = pycurl.Curl()
try:
transfer.setopt(pycurl.URL, ftp_url)
transfer.setopt(pycurl.PROXY, "socks5h://proxy.example.net:1080")
transfer.setopt(pycurl.NOPROXY, "")
transfer.setopt(pycurl.WRITEDATA, output)
transfer.setopt(pycurl.CONNECTTIMEOUT, 10)
transfer.setopt(pycurl.TIMEOUT, 60)
transfer.perform()
finally:
transfer.close()
Το ftp_url είναι η διεύθυνση URL του πόρου FTP της εφαρμογής και το output είναι ένα ήδη ανοιχτό δυαδικό ρεύμα εξόδου. Τα χρονικά όρια είναι ενδεικτικά όρια που επιλέγονται με βάση το αναμενόμενο μέγεθος αρχείου και τη σύνδεση. Για έναν δημόσιο πόρο FTP όπου επιτρέπονται δημόσιοι μεσολαβητές, η λίστα διακομιστών μεσολάβησης SOCKS5 προσφέρει υποψηφίους για τη διεύθυνση URL του μεσολαβητή· ελέγξτε ότι ο επιλεγμένος κόμβος επιτρέπει και τον προορισμό ελέγχου και τον προορισμό παθητικών δεδομένων.
Το socks5h αναθέτει την επίλυση του ονόματος κεντρικού υπολογιστή προορισμού στον μεσολαβητή SOCKS. Το NOPROXY είναι σκόπιμα κενό ώστε μια κληρονομημένη ρύθμιση περιβάλλοντος no_proxy να μην παρακάμπτει τη διαδρομή για αυτή τη μεταφορά.
Αφήστε το ενεργό FTP απενεργοποιημένο: περιμένει εισερχόμενη σύνδεση από τον διακομιστή και δεν είναι διαθέσιμο σε αυτή τη λειτουργία μεσολαβητή. Η πολιτική εξερχόμενων του μεσολαβητή πρέπει να επιτρέπει τη θύρα ελέγχου FTP και τη θύρα παθητικών δεδομένων που επιλέχθηκε για τη μεταφορά. Επομένως, μια επιτυχής σύνδεση από μόνη της δεν αποδεικνύει ότι το αρχείο μπορεί να ληφθεί.
Όταν απαιτείται έλεγχος ταυτότητας, χρησιμοποιήστε τα PROXYUSERNAME και PROXYPASSWORD του PycURL για τον μεσολαβητή· τα διαπιστευτήρια του διακομιστή FTP ανήκουν στη σύνδεση FTP.