Commons Net FTPHTTPClient: HTTP-proxytunnelar for passiv FTP
Tunnel FTP-kontroll og passive dataforbindingar gjennom ein HTTP-proxy med den dedikerte klienten til Commons Net.
Apache Commons Net inneheld FTPHTTPClient for FTP gjennom ein HTTP CONNECT-proxy. Den nyttige eigenskapen er ikkje berre å nå FTP-innloggingsporten: han set også opp proxytunnelar for dei passive dataforbindingane som lister og filoverføringar brukar.
Konstruktøren tek imot proxy-endepunktet og valfrie proxy-påloggingsdata. FTP-tenaren blir verande argumentet til connect, og login tek imot 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øringsfragmentet føreset FTP-importane til Commons Net, java.io.IOException, påloggingsvariablar frå applikasjonen og ein utstraum som kallaren eig. remoteFile er det tiltenkte filnamnet på tenarsida. Applikasjonen må òg lukke utstraumen sin på rett tidspunkt.
Set passiv modus etter tilkopling og før ein dataoperasjon. Implementasjonen av FTPHTTPClient avviser dataforbindingar i aktiv modus. I passiv modus forhandlar han dataendepunktet med FTP og opnar ei ny tilkopling til HTTP-proxyen, og ber deretter om ein CONNECT-tunnel til dette endepunktet.
Den andre tunnelen forklarer ei vanleg grense: proxyløyve for FTP-kontrollporten er ikkje nok. Dei tillatne måla og portane må omfatte dei passive dataendepunkta til tenaren. Ei vellukka helsing og innlogging beviser berre at kontrollruta verka.
Implementasjonen leverer Basic-proxyautentisering når både proxy-brukarnamn og -passord er til stades. Det er ulikt FTP USER/PASS-utvekslinga. Ein proxy som krev ein annan autentiseringsmekanisme, treng ein kompatibel kontakt; konstruktøren gjer ikkje kvar ordning tilgjengeleg.
Commons Net dokumenterer denne klassen som eksperimentell, så vurder han mot krava til applikasjonen og proxyen før du tek han i bruk. Han er ein FTP-klient, ikkje ein FTPS- eller SFTP-klient. For FTPS med ein tilgjengeleg SOCKS-teneste er socket-proxy-grensesnittet til FTPSClient ein eigen klientveg. CONNECT gjev ruta og krypterer ikkje sjølv FTP-påloggingsdata eller filinnhald.
Hald feil knytte til trinnet som skapte dei: ei HTTP-avvising under tunneloppsett, ei avvist FTP-innlogging eller ein FTP-/dataoverføringsfeil. Å byte FTP-passord kan ikkje løyse ei proxyregel som avviser den passive dataportet.