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. Проксі, які патрабуе іншага механізму аўтэнтыфікацыі, патрабуе сумяшчальнага канэктара; канструктар не робіць даступнай кожную схему.
Commons Net дакументуе гэты клас як эксперыментальны, таму ацаніце яго адносна патрабаванняў праграмы і проксі, перш чым прымаць. Гэта кліент FTP, а не кліент FTPS або SFTP. Для FTPS з даступнай службай SOCKS інтэрфейс сокет-проксі FTPSClient — гэта асобны шлях кліента. CONNECT забяспечвае маршрут і сам не шыфруе ўліковыя даныя FTP або змест файлаў.
Трымайце памылкі прывязанымі да этапу, які іх выклікаў: адмова HTTP падчас налады тунэля, адмова ва ўваходзе FTP або збой перадачы FTP/даных. Замена пароля FTP не можа вырашыць палітыку проксі, якая адхіляе пасіўны порт даных.