Commons Net FTPHTTPClient: mga tunel ng proxy HTTP para sa passive na FTP
I-tunel ang kontrol ng FTP at ang mga passive na koneksyon ng data sa pamamagitan ng isang proxy HTTP gamit ang dedikadong kliyente ng Commons Net.
May FTPHTTPClient sa Apache Commons Net para sa FTP sa pamamagitan ng isang proxy HTTP CONNECT. Ang kapaki-pakinabang na katangian nito ay hindi lamang ang pag-abot sa porta ng pag-login sa FTP: nagtatatag din ito ng mga tunel ng proxy para sa mga passive na koneksyon ng data na ginagamit ng mga listahan at paglilipat ng file.
Tinatanggap ng konstruktor ang endpoint ng proxy at opsyonal na mga kredensyal ng proxy. Ang server ng FTP ay nananatiling argumento ng connect, at ang login ay tumatanggap ng account ng 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();
}
}
Ang bahaging ito ng paglilipat ay ipinapalagay ang mga import ng FTP ng Commons Net, java.io.IOException, mga baryabol ng kredensyal na ibinibigay ng aplikasyon at isang stream ng output na pag-aari ng tumatawag. Ang remoteFile ay ang nilalayong pangalan ng file sa panig ng server. Dapat ding isara ng aplikasyon ang stream ng output nito sa tamang sandali.
Itakda ang passive mode pagkatapos kumonekta at bago ang operasyon ng data. Tinatanggihan ng implementasyon ng FTPHTTPClient ang mga koneksyon ng data sa active mode. Sa passive mode, nakikipag-ayos ito ng endpoint ng data sa FTP at nagbubukas ng isa pang koneksyon sa proxy HTTP, pagkatapos ay humihiling ng tunel ng CONNECT sa endpoint na iyon.
Ipinaliliwanag ng ikalawang tunel na iyon ang karaniwang hangganan: hindi sapat ang pahintulot ng proxy para sa porta ng kontrol ng FTP. Dapat isama ng mga pinahihintulutang destinasyon at porta ang mga passive na endpoint ng data ng server. Ang matagumpay na pagbati at pag-login ay nagpapatunay lamang na gumana ang ruta ng kontrol.
Nagbibigay ang implementasyon ng Basic na pagpapatunay ng proxy kapag naroroon ang parehong username at password ng proxy. Iba ito sa palitan ng FTP USER/PASS. Ang proxy na nangangailangan ng ibang mekanismo ng pagpapatunay ay kailangan ng compatible na konektor; hindi ginagawang available ng konstruktor ang bawat scheme.
Idinodokumento ng Commons Net ang klase na ito bilang eksperimental, kaya suriin ito laban sa mga pangangailangan ng aplikasyon at proxy bago ito tanggapin. Ito ay kliyente ng FTP, hindi kliyente ng FTPS o SFTP. Para sa FTPS na may available na serbisyo ng SOCKS, ang interface ng socket-proxy ng FTPSClient ay hiwalay na landas ng kliyente. Nagbibigay ang CONNECT ng ruta at hindi nito mismo ine-encrypt ang mga kredensyal ng FTP o nilalaman ng file.
Panatilihing nakaugnay ang mga error sa yugtong gumawa sa mga ito: isang pagtanggi ng HTTP habang isinasagawa ang tunel, isang pagtanggi sa pag-login sa FTP, o isang pagpalya ng paglilipat ng FTP/data. Ang pagpapalit ng password ng FTP ay hindi malulutas ang isang patakaran ng proxy na tumatanggi sa passive na porta ng data.