Apache Commons Net sadrži FTPHTTPClient za FTP kroz HTTP CONNECT proxy. Njegova korisna osobina nije samo dosezanje FTP porta za prijavu: on također uspostavlja proxy tunele za pasivne data veze koje koriste liste i prijenosi datoteka.

Konstruktor prima proxy endpoint i opcionalne proxy akreditive. FTP server ostaje argument za connect, a login prima FTP račun:

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

Ovaj isječak prijenosa pretpostavlja FTP importe Commons Net-a, java.io.IOException, varijable akreditiva koje daje aplikacija i izlazni tok u vlasništvu pozivaoca. remoteFile je predviđeno ime datoteke na strani servera. Aplikacija također mora zatvoriti svoj izlazni tok u odgovarajućem trenutku.

Postavite pasivni režim nakon povezivanja i prije data operacije. Implementacija FTPHTTPClient-a odbija data veze u aktivnom režimu. U pasivnom režimu pregovara data endpoint s FTP-om i otvara još jednu vezu prema HTTP proxyju, zatim traži CONNECT tunel do tog endpointa.

Drugi tunel objašnjava čestu granicu: proxy dozvola za FTP kontrolni port nije dovoljna. Dozvoljene destinacije i portovi moraju uključivati pasivne data endpointe servera. Uspješan pozdrav i prijava dokazuju samo da je kontrolna ruta radila.

Implementacija pruža Basic proxy autentifikaciju kada su prisutni i proxy korisničko ime i lozinka. To se razlikuje od FTP USER/PASS razmjene. Proxy koji zahtijeva drugi mehanizam autentifikacije treba kompatibilan konektor; konstruktor ne čini svaku shemu dostupnom.

Commons Net dokumentuje ovu klasu kao eksperimentalnu, pa je procijenite prema zahtjevima aplikacije i proxyja prije usvajanja. To je FTP klijent, a ne FTPS ili SFTP klijent. Za FTPS s dostupnom SOCKS uslugom socket-proxy interfejs FTPSClient-a je odvojena klijentska putanja. CONNECT pruža rutu i sam ne šifrira FTP akreditive ni sadržaj datoteka.

Držite greške vezane za fazu koja ih je proizvela: HTTP odbijanje tokom postavljanja tunela, odbijanje FTP prijave ili neuspjeh FTP/data prijenosa. Zamjena FTP lozinke ne može riješiti proxy politiku koja odbija pasivni data port.

Povezani članci