Apache Commons Net sadrži FTPHTTPClient za FTP kroz HTTP CONNECT proxy. Njegova korisna značajka nije samo dosezanje FTP prijavnog porta: uspostavlja i proxy tunele za pasivne podatkovne veze koje koriste popisi i prijenosi datoteka.

Konstruktor prima proxy endpoint i neobavezne proxy vjerodajnice. FTP poslužitelj 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 uvoze Commons Neta, java.io.IOException, varijable vjerodajnica koje daje aplikacija i izlazni tok u vlasništvu pozivatelja. remoteFile je predviđeno ime datoteke na strani poslužitelja. Aplikacija također mora zatvoriti svoj izlazni tok u odgovarajućem trenutku.

Postavite pasivni način nakon povezivanja i prije podatkovne operacije. Implementacija FTPHTTPClienta odbija podatkovne veze u aktivnom načinu. U pasivnom načinu pregovara podatkovni endpoint s FTP-om i otvara još jednu vezu prema HTTP proxyju, a zatim traži CONNECT tunel do tog endpointa.

Taj drugi tunel objašnjava čestu granicu: proxy dozvola za FTP kontrolni port nije dovoljna. Dopuštene destinacije i portovi moraju uključivati pasivne podatkovne endpointe poslužitelja. 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 dokumentira 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 sučelje FTPSClienta odvojena je klijentska putanja. CONNECT pruža rutu i sam ne šifrira FTP vjerodajnice ni sadržaj datoteka.

Držite greške vezane uz fazu koja ih je proizvela: HTTP odbijanje tijekom postavljanja tunela, odbijanje FTP prijave ili neuspjeh FTP/podatkovnog prijenosa. Zamjena FTP lozinke ne može riješiti proxy pravilo koje odbija pasivni podatkovni port.

Povezani članci