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