Commons Net FTPHTTPClient: Terowong Proksi HTTP untuk FTP Pasif
Terowongkan kawalan FTP dan sambungan data pasif melalui proksi HTTP dengan klien khusus Commons Net.
Apache Commons Net menyertakan FTPHTTPClient untuk FTP melalui proksi HTTP CONNECT. Ciri bergunanya bukan sekadar mencapai port log masuk FTP: ia juga mewujudkan terowong proksi untuk sambungan data pasif yang digunakan oleh penyenaraian dan pemindahan fail.
Pembina menerima titik akhir proksi dan kelayakan proksi pilihan. Pelayan FTP kekal sebagai argumen kepada connect, dan login menerima akaun 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();
}
}
Serpihan pemindahan ini menganggap import FTP Commons Net, java.io.IOException, pemboleh ubah kelayakan yang dibekalkan aplikasi dan strim output milik pemanggil. remoteFile ialah nama fail yang dimaksudkan di sebelah pelayan. Aplikasi juga mesti menutup strim outputnya pada masa yang sesuai.
Tetapkan mod pasif selepas bersambung dan sebelum operasi data. Pelaksanaan FTPHTTPClient menolak sambungan data dalam mod aktif. Dalam mod pasif, ia merundingkan titik akhir data dengan FTP dan membuka satu lagi sambungan ke proksi HTTP, kemudian meminta terowong CONNECT ke titik akhir itu.
Terowong kedua itu menjelaskan had biasa: kebenaran proksi untuk port kawalan FTP tidak mencukupi. Destinasi dan port yang dibenarkan mesti merangkumi titik akhir data pasif pelayan. Sapaan dan log masuk yang berjaya hanya membuktikan laluan kawalan berfungsi.
Pelaksanaan menyediakan pengesahan proksi Basic apabila nama pengguna dan kata laluan proksi kedua-duanya hadir. Itu berbeza daripada pertukaran FTP USER/PASS. Proksi yang memerlukan mekanisme pengesahan lain memerlukan penyambung yang serasi; pembina tidak menyediakan setiap skema.
Commons Net mendokumenkan kelas ini sebagai eksperimen, jadi nilaikannya terhadap keperluan aplikasi dan proksi sebelum menerimanya. Ia klien FTP, bukan klien FTPS atau SFTP. Untuk FTPS dengan perkhidmatan SOCKS tersedia, antara muka soket-proksi FTPSClient ialah laluan klien berasingan. CONNECT menyediakan laluan dan tidak menyulitkan kelayakan FTP atau kandungan fail dengan sendirinya.
Kekalkan ralat terikat pada peringkat yang menghasilkannya: penolakan HTTP semasa penyediaan terowong, penolakan log masuk FTP, atau kegagalan pemindahan FTP/data. Menggantikan kata laluan FTP tidak dapat menyelesaikan dasar proksi yang menolak port data pasif.