Apache Commons Net, HTTP CONNECT proksisi vasitəsilə FTP üçün FTPHTTPClient sinfini ehtiva edir. Onun faydalı xüsusiyyəti yalnız FTP giriş portuna çatmaq deyil: o, həmçinin siyahılar və fayl ötürmələri üçün istifadə olunan passiv data bağlantıları üçün proksi tunelləri qurur.

Konstruktor proksi son nöqtəsini və istəyə bağlı proksi etimadnamələrini qəbul edir. FTP serveri connect üçün arqument olaraq qalır, login isə FTP hesabını qəbul edir:

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();
    }
}

Bu ötürmə fraqmenti Commons Net-in FTP idxallarını, java.io.IOException, tətbiq tərəfindən verilən etimadnamə dəyişənlərini və çağırana məxsus çıxış axınını fərz edir. remoteFile server tərəfində nəzərdə tutulan fayl adıdır. Tətbiq həmçinin öz çıxış axınını müvafiq nöqtədə bağlamalıdır.

Passiv rejimi qoşulduqdan sonra və data əməliyyatından əvvəl təyin edin. FTPHTTPClient-in tətbiqi aktiv rejimdə data bağlantılarını rədd edir. Passiv rejimdə o, data son nöqtəsini FTP ilə razılaşdırır və HTTP proksisinə başqa bir bağlantı açır, sonra həmin son nöqtəyə CONNECT tuneli tələb edir.

Bu ikinci tunel ümumi bir sərhədi izah edir: FTP idarəetmə portu üçün proksi icazəsi kifayət deyil. İcazə verilən təyinatlar və portlar serverin passiv data son nöqtələrini əhatə etməlidir. Uğurlu salamlaşma və giriş yalnız idarəetmə marşrutunun işlədiyini sübut edir.

Tətbiq həm proksi istifadəçi adı, həm də parol mövcud olduqda Basic proksi autentifikasiyasını təqdim edir. Bu, FTP USER/PASS mübadiləsindən fərqlidir. Başqa autentifikasiya mexanizmi tələb edən proksi uyğun konnektor tələb edir; konstruktor hər sxemi əlçatan etmir.

Commons Net bu sinfi eksperimental kimi sənədləşdirir, ona görə də onu qəbul etməzdən əvvəl tətbiqin və proksinin tələbləri ilə müqayisə edin. O, FTP müştərisidir, FTPS və ya SFTP müştərisi deyil. SOCKS xidməti mövcud olduqda FTPS üçün FTPSClient-in soket-proksi interfeysi ayrı bir müştəri yoludur. CONNECT marşrutu təmin edir və FTP etimadnamələrini və ya fayl məzmununu özü şifrələmir.

Xətaları yarandığı mərhələyə bağlı saxlayın: tunelin qurulması zamanı HTTP rəddi, FTP girişinin rədd edilməsi və ya FTP/data ötürmə uğursuzluğu. FTP parolunu dəyişmək passiv data portunu rədd edən proksi siyasətini həll edə bilməz.

Əlaqəli məqalələr