Apache Commons Net vsebuje FTPHTTPClient za FTP skozi HTTP CONNECT proxy. Njegova uporabna lastnost ni le doseganje vrat za prijavo FTP: vzpostavi tudi proxy tunele za pasivne podatkovne povezave, ki jih uporabljajo seznami in prenosi datotek.

Konstruktor sprejme končno točko proxyja in neobvezne poverilnice proxyja. Strežnik FTP ostane argument connect, login pa prejme račun 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();
    }
}

Ta odlomek prenosa predpostavlja uvoze FTP Commons Net, java.io.IOException, spremenljivke s poverilnicami, ki jih zagotovi aplikacija, in izhodni tok v lasti klicatelja. remoteFile je predvideno ime datoteke na strani strežnika. Aplikacija mora tudi zapreti svoj izhodni tok ob pravem trenutku.

Nastavite pasivni način po povezavi in pred podatkovno operacijo. Izvedba FTPHTTPClient zavrača podatkovne povezave v aktivnem načinu. V pasivnem načinu se pogaja za končno točko podatkov s FTP in odpre še eno povezavo do HTTP proxyja, nato zahteva tunel CONNECT do te končne točke.

Ta drugi tunel pojasnjuje pogosto mejo: dovoljenje proxyja za nadzorna vrata FTP ne zadošča. Dovoljeni cilji in vrata morajo vključevati pasivne končne točke podatkov strežnika. Uspešen pozdrav in prijava dokažeta le, da je nadzorna pot delovala.

Izvedba zagotavlja Basic preverjanje pristnosti proxyja, ko sta prisotna tako uporabniško ime kot geslo proxyja. To se razlikuje od izmenjave FTP USER/PASS. Proxy, ki zahteva drug mehanizem preverjanja pristnosti, potrebuje združljiv konektor; konstruktor ne omogoči vsake sheme.

Commons Net to razred dokumentira kot poskusni, zato ga pred sprejetjem ocenite glede na zahteve aplikacije in proxyja. To je odjemalec FTP, ne odjemalec FTPS ali SFTP. Za FTPS z razpoložljivo storitvijo SOCKS je vmesnik socket-proxy razreda FTPSClient ločena odjemalska pot. CONNECT zagotavlja pot in sam ne šifrira poverilnic FTP ali vsebine datotek.

Napake ohranite povezane s stopnjo, ki jih je povzročila: zavrnitev HTTP med nastavitvijo tunela, zavrnitev prijave FTP ali napaka pri prenosu FTP/podatkov. Zamenjava gesla FTP ne more rešiti pravilnika proxyja, ki zavrača pasivna podatkovna vrata.

Sorodni članki