Apache Commons Net sisaldab FTPHTTPClient, et kasutada FTP-d HTTP CONNECT puhverserveri kaudu. Selle kasulik omadus ei ole ainult FTP sisselogimispordi jõudmine: see loob puhverserveri tunnelid ka passiivsetele andmeühendustele, mida kasutavad loendid ja failiedastused.

Konstruktor võtab vastu puhverserveri lõpp-punkti ja valikulised puhverserveri mandaadid. FTP-server jääb connect argumendiks ja login saab FTP-konto:

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

See edastusfragment eeldab Commons Neti FTP-importe, java.io.IOException, rakenduse antud mandaadimuutujaid ja kutsuja omanduses olevat väljundvoogu. remoteFile on kavandatud failinimi serveri poolel. Rakendus peab oma väljundvoo ka õigel hetkel sulgema.

Määrake passiivne režiim pärast ühendamist ja enne andmetoimingut. FTPHTTPClienti teostus keeldub andmeühendustest aktiivses režiimis. Passiivses režiimis peab see FTP-ga läbi andmete lõpp-punkti ning avab teise ühenduse HTTP puhverserveriga, seejärel taotleb CONNECT tunnelit sellesse lõpp-punkti.

See teine tunnel selgitab tavalist piiri: puhverserveri luba FTP juhtimispordi jaoks ei ole piisav. Lubatud sihtkohad ja pordid peavad sisaldama serveri passiivseid andmete lõpp-punkte. Edukas tervitus ja sisselogimine tõestavad ainult, et juhtimistee toimis.

Teostus pakub Basic-puhverserveri autentimist, kui nii puhverserveri kasutajanimi kui ka parool on olemas. See erineb FTP USER/PASS vahetusest. Muud autentimismehhanismi nõudev puhverserver vajab ühilduvat konnektorit; konstruktor ei tee iga skeemi kättesaadavaks.

Commons Net dokumenteerib selle klassi eksperimentaalsena, seega hinnake seda enne kasutuselevõttu rakenduse ja puhverserveri nõuete suhtes. See on FTP-klient, mitte FTPS- ega SFTP-klient. FTPS-i jaoks, kui SOCKS-teenus on saadaval, on FTPSClienti socket-puhverserveri liides eraldi klienditee. CONNECT pakub marsruudi ega krüpteeri ise FTP mandaate ega failisisu.

Hoidke vead seotud etapiga, mis need tekitas: HTTP keeldumine tunneli seadistamisel, FTP sisselogimise keeldumine või FTP/andmeedastuse tõrge. FTP parooli asendamine ei suuda lahendada puhverserveri poliitikat, mis keeldub passiivsest andmepordist.

Seotud artiklid