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 сырсөзүн алмаштыруу пассивдүү дайындар портун четке каккан прокси саясатын чече албайт.