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();
}
}
ეს გადაცემის ფრაგმენტი ვარაუდობს Commons Net-ის FTP იმპორტებს, java.io.IOException-ს, აპლიკაციის მიერ მოწოდებულ სერტიფიკატის ცვლადებს და გამომძახებლის საკუთრებაში არსებულ გამომავალ ნაკადს. remoteFile არის სერვერის მხარეს განკუთვნილი ფაილის სახელი. აპლიკაციამ თავისი გამომავალი ნაკადიც შესაბამის მომენტში უნდა დახუროს.
დააყენეთ პასიური რეჟიმი დაკავშირების შემდეგ და მონაცემთა ოპერაციამდე. FTPHTTPClient-ის იმპლემენტაცია უარყოფს მონაცემთა კავშირებს აქტიურ რეჟიმში. პასიურ რეჟიმში ის FTP-სთან აწარმოებს მოლაპარაკებას მონაცემთა ბოლო წერტილზე და ხსნის კიდევ ერთ კავშირს HTTP პროქსისკენ, შემდეგ ითხოვს CONNECT გვირაბს ამ წერტილამდე.
ეს მეორე გვირაბი ხსნის ჩვეულ საზღვარს: პროქსის ნებართვა FTP-ის კონტროლის პორტზე საკმარისი არ არის. ნებადართული დანიშნულებები და პორტები უნდა მოიცავდეს სერვერის პასიური მონაცემების ბოლო წერტილებს. წარმატებული მისალმება და შესვლა მხოლოდ იმას ამტკიცებს, რომ კონტროლის მარშრუტი მუშაობდა.
იმპლემენტაცია უზრუნველყოფს Basic პროქსის აუთენტიფიკაციას, როცა პროქსის მომხმარებლის სახელი და პაროლი ერთად არსებობს. ეს განსხვავდება FTP USER/PASS გაცვლისგან. სხვა აუთენტიფიკაციის მექანიზმის მომთხოვნ პროქსის სჭირდება თავსებადი კონექტორი; კონსტრუქტორი ყველა სქემას ხელმისაწვდომს არ ხდის.
Commons Net ამ კლასს ექსპერიმენტულად აღწერს, ამიტომ მიღებამდე შეაფასეთ ის აპლიკაციისა და პროქსის მოთხოვნების მიხედვით. ეს FTP კლიენტია და არა FTPS ან SFTP კლიენტი. ხელმისაწვდომი SOCKS სერვისის მქონე FTPS-ისთვის FTPSClient-ის სოკეტ-პროქსის ინტერფეისი ცალკე კლიენტის გზაა. CONNECT უზრუნველყოფს მარშრუტს და თავად არ შიფრავს FTP-ის მონაცემებს ან ფაილების შიგთავსს.
შეინარჩუნეთ შეცდომების კავშირი იმ ეტაპთან, რომელმაც ისინი წარმოშვა: HTTP-ის უარყოფა გვირაბის დაყენებისას, FTP-ში შესვლის უარყოფა ან FTP/მონაცემთა გადაცემის წარუმატებლობა. FTP პაროლის შეცვლა ვერ გადაჭრის პროქსის პოლიტიკას, რომელიც პასიურ მონაცემთა პორტს უარყოფს.