Commons Net FTPHTTPClient: HTTP-proxytunneler til passiv FTP
Tunnel FTP-kontrol og passive dataforbindelser gennem en HTTP-proxy med Commons Nets dedikerede klient.
Apache Commons Net indeholder FTPHTTPClient til FTP gennem en HTTP CONNECT-proxy. Dens nyttige egenskab er ikke blot at nå FTP-loginporten: den opretter også proxytunneler til de passive dataforbindelser, som lister og filoverførsler bruger.
Konstruktøren accepterer proxyendpointet og valgfrie proxyoplysninger. FTP-serveren forbliver argumentet til connect, og login modtager FTP-kontoen:
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();
}
}
Dette overførselsuddrag forudsætter Commons Nets FTP-importer, java.io.IOException, legitimationsvariabler leveret af applikationen og en outputstrøm ejet af kalderen. remoteFile er det tilsigtede filnavn på serversiden. Applikationen skal også lukke sin outputstrøm på det rette tidspunkt.
Sæt passiv tilstand efter tilslutning og før en dataoperation. FTPHTTPClient-implementeringen afviser dataforbindelser i aktiv tilstand. I passiv tilstand forhandler den dataendpointet med FTP og åbner endnu en forbindelse til HTTP-proxyen, hvorefter den anmoder om en CONNECT-tunnel til dette endpoint.
Den anden tunnel forklarer en almindelig grænse: proxytilladelse til FTP-kontrolporten er ikke nok. De tilladte destinationer og porte skal omfatte serverens passive dataendpoints. En vellykket hilsen og login beviser kun, at kontrolruten virkede.
Implementeringen leverer Basic-proxygodkendelse, når både proxybrugernavn og -adgangskode er til stede. Det er forskelligt fra FTP USER/PASS-udvekslingen. En proxy, der kræver en anden godkendelsesmekanisme, har brug for et kompatibelt connector; konstruktøren gør ikke hver ordning tilgængelig.
Commons Net dokumenterer denne klasse som eksperimentel, så vurder den op mod applikations- og proxykravene, før du tager den i brug. Det er en FTP-klient, ikke en FTPS- eller SFTP-klient. Til FTPS med en tilgængelig SOCKS-tjeneste er socket-proxy-grænsefladen i FTPSClient en separat klientvej. CONNECT leverer ruten og krypterer ikke selv FTP-oplysninger eller filindhold.
Hold fejl knyttet til det trin, der frembragte dem: en HTTP-afvisning under tunnelopsætning, en FTP-loginafvisning eller en FTP/dataoverførselsfejl. Det kan ikke løse en proxyregel, der afviser den passive dataport, at erstatte FTP-adgangskoden.