Apache Commons Net ietver FTPHTTPClient FTP lietošanai caur HTTP CONNECT starpniekserveri. Tā noderīgā īpašība nav tikai FTP pieteikšanās porta sasniegšana: tā arī izveido starpniekservera tuneļus pasīvajiem datu savienojumiem, ko izmanto saraksti un failu pārsūtīšana.

Konstruktors pieņem starpniekservera galapunktu un neobligātus starpniekservera akreditācijas datus. FTP serveris paliek connect arguments, un login saņem FTP kontu:

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

Šis pārsūtīšanas fragments pieņem Commons Net FTP importus, java.io.IOException, lietotnes nodrošinātos akreditācijas datu mainīgos un izsaukuma veicējam piederošu izvades plūsmu. remoteFile ir paredzētais faila nosaukums servera pusē. Lietotnei arī attiecīgajā brīdī jāaizver sava izvades plūsma.

Iestatiet pasīvo režīmu pēc savienojuma un pirms datu darbības. FTPHTTPClient ieviešana noraida datu savienojumus aktīvajā režīmā. Pasīvajā režīmā tā vienojas ar FTP par datu galapunktu un atver vēl vienu savienojumu ar HTTP starpniekserveri, pēc tam pieprasa CONNECT tuneli uz šo galapunktu.

Otrais tunelis izskaidro bieži sastopamu robežu: starpniekservera atļauja FTP vadības portam nav pietiekama. Atļautajiem galamērķiem un portiem jāietver servera pasīvie datu galapunkti. Veiksmīgs sveiciens un pieteikšanās pierāda tikai to, ka vadības maršruts darbojās.

Ieviešana nodrošina Basic starpniekservera autentifikāciju, ja ir gan starpniekservera lietotājvārds, gan parole. Tas atšķiras no FTP USER/PASS apmaiņas. Starpniekserverim, kas pieprasa citu autentifikācijas mehānismu, nepieciešams saderīgs savienotājs; konstruktors nepadara pieejamu katru shēmu.

Commons Net dokumentē šo klasi kā eksperimentālu, tāpēc pirms pieņemšanas novērtējiet to atbilstoši lietotnes un starpniekservera prasībām. Tas ir FTP klients, nevis FTPS vai SFTP klients. Ja ir pieejams SOCKS pakalpojums, FTPS gadījumā FTPSClient ligzdas starpniekservera saskarne ir atsevišķs klienta ceļš. CONNECT nodrošina maršrutu un pats nešifrē FTP akreditācijas datus vai failu saturu.

Turiet kļūdas piesaistītas posmam, kurā tās radušās: HTTP atteikums tuneļa iestatīšanas laikā, FTP pieteikšanās atteikums vai FTP/datu pārsūtīšanas kļūme. FTP paroles nomaiņa nevar atrisināt starpniekservera politiku, kas noraida pasīvo datu portu.

Saistītie raksti