Commons Net FTPHTTPClient: σήραγγες διαμεσολαβητή HTTP για παθητικό FTP
Διοχετεύστε τον έλεγχο FTP και τις παθητικές συνδέσεις δεδομένων μέσω διαμεσολαβητή HTTP με τον ειδικό πελάτη του Commons Net.
Το Apache Commons Net περιλαμβάνει το FTPHTTPClient για FTP μέσω διαμεσολαβητή HTTP CONNECT. Το χρήσιμο χαρακτηριστικό του δεν είναι μόνο η πρόσβαση στη θύρα σύνδεσης FTP: δημιουργεί επίσης σήραγγες διαμεσολαβητή για τις παθητικές συνδέσεις δεδομένων που χρησιμοποιούν οι κατάλογοι και οι μεταφορές αρχείων.
Ο κατασκευαστής δέχεται το τελικό σημείο του διαμεσολαβητή και προαιρετικά διαπιστευτήρια διαμεσολαβητή. Ο διακομιστής FTP παραμένει το όρισμα του connect, και το login δέχεται τον λογαριασμό FTP:
FTPHTTPClient ftp = new FTPHTTPClient(
"proxy.example.net", 8080, proxyUser, proxyPassword
);
try {
ftp.connect("ftp.example.net", 21);
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
throw new IOException(ftp.getReplyString());
}
if (!ftp.login(ftpUser, ftpPassword)) {
throw new IOException(ftp.getReplyString());
}
ftp.enterLocalPassiveMode();
if (!ftp.setFileType(FTP.BINARY_FILE_TYPE)
|| !ftp.retrieveFile(remoteFile, output)) {
throw new IOException(ftp.getReplyString());
}
ftp.logout();
} finally {
if (ftp.isConnected()) {
ftp.disconnect();
}
}
Αυτό το απόσπασμα μεταφοράς προϋποθέτει τις εισαγωγές FTP του Commons Net, το java.io.IOException, μεταβλητές διαπιστευτηρίων που παρέχει η εφαρμογή και μια ροή εξόδου που ανήκει στον καλούντα. Το remoteFile είναι το επιδιωκόμενο όνομα αρχείου στην πλευρά του διακομιστή. Η εφαρμογή πρέπει επίσης να κλείσει τη ροή εξόδου της στο κατάλληλο σημείο.
Ορίστε την παθητική λειτουργία μετά τη σύνδεση και πριν από μια λειτουργία δεδομένων. Η υλοποίηση του FTPHTTPClient απορρίπτει συνδέσεις δεδομένων στην ενεργή λειτουργία. Στην παθητική λειτουργία, διαπραγματεύεται το τελικό σημείο δεδομένων με το FTP και ανοίγει άλλη σύνδεση προς τον διαμεσολαβητή HTTP, και έπειτα ζητά σήραγγα CONNECT προς αυτό το τελικό σημείο.
Αυτή η δεύτερη σήραγγα εξηγεί ένα συνηθισμένο όριο: η άδεια του διαμεσολαβητή για τη θύρα ελέγχου FTP δεν αρκεί. Οι επιτρεπόμενοι προορισμοί και θύρες πρέπει να περιλαμβάνουν τα παθητικά τελικά σημεία δεδομένων του διακομιστή. Ένας επιτυχημένος χαιρετισμός και η σύνδεση αποδεικνύουν μόνο ότι λειτούργησε η διαδρομή ελέγχου.
Η υλοποίηση παρέχει έλεγχο ταυτότητας διαμεσολαβητή Basic όταν υπάρχουν και το όνομα χρήστη και ο κωδικός πρόσβασης του διαμεσολαβητή. Αυτό διαφέρει από την ανταλλαγή FTP USER/PASS. Ένας διαμεσολαβητής που απαιτεί άλλο μηχανισμό ελέγχου ταυτότητας χρειάζεται συμβατό connector· ο κατασκευαστής δεν καθιστά διαθέσιμο κάθε σχήμα.
Το Commons Net τεκμηριώνει αυτή την κλάση ως πειραματική, οπότε αξιολογήστε την σε σχέση με τις απαιτήσεις της εφαρμογής και του διαμεσολαβητή πριν την υιοθετήσετε. Είναι πελάτης FTP, όχι πελάτης FTPS ή SFTP. Για FTPS με διαθέσιμη υπηρεσία SOCKS, η διεπαφή socket-proxy του FTPSClient είναι ξεχωριστή διαδρομή πελάτη. Το CONNECT παρέχει τη διαδρομή και δεν κρυπτογραφεί το ίδιο διαπιστευτήρια FTP ή περιεχόμενα αρχείων.
Κρατήστε τα σφάλματα συνδεδεμένα με το στάδιο που τα παρήγαγε: απόρριψη HTTP κατά τη ρύθμιση της σήραγγας, άρνηση σύνδεσης FTP ή αποτυχία μεταφοράς FTP/δεδομένων. Η αντικατάσταση του κωδικού FTP δεν μπορεί να λύσει μια πολιτική διαμεσολαβητή που απορρίπτει την παθητική θύρα δεδομένων.