Commons Net FTPHTTPClient: HTTP proxy tuneli za pasivni FTP
Tunelirajte FTP kontrolu i pasivne podatkovne veze kroz HTTP proxy uz namjenski klijent Commons Neta.
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.