Commons Net FTPHTTPClient: пассивті FTP үшін HTTP прокси туннельдері
FTP басқаруын және пассивті деректер қосылымдарын Commons Net-тің арнайы клиентімен HTTP прокси арқылы туннельдеңіз.
Apache Commons Net ішінде HTTP CONNECT проксиі арқылы FTP үшін FTPHTTPClient бар. Оның пайдалы ерекшелігі тек 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 құпиясөзін ауыстыру пассивті деректер портын қабылдамайтын прокси саясатын шеше алмайды.