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 паролата не може да реши политика на проксито, която отхвърля пасивния порт за данни.