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

Подобни статии