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 не можа вырашыць палітыку проксі, якая адхіляе пасіўны порт даных.

Падобныя артыкулы