Commons Net FTPHTTPClient: HTTP-proxytunnlar för passiv FTP
Tunnla FTP-styrning och passiva dataanslutningar genom en HTTP-proxy med Commons Nets dedikerade klient.
Apache Commons Net innehåller FTPHTTPClient för FTP via en HTTP CONNECT-proxy. Den användbara egenskapen är inte bara att nå FTP-inloggningsporten: den upprättar också proxytunnlar för de passiva dataanslutningar som listningar och filöverföringar använder.
Konstruktorn tar emot proxyns slutpunkt och valfria proxyuppgifter. FTP-servern är fortfarande argumentet till connect, och login tar emot FTP-kontot:
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();
}
}
Detta överföringsfragment förutsätter Commons Nets FTP-importer, java.io.IOException, autentiseringsvariabler som tillhandahålls av programmet och en utström som ägs av anroparen. remoteFile är det avsedda filnamnet på serversidan. Programmet måste också stänga sin utström vid rätt tillfälle.
Ställ in passivt läge efter anslutning och före en dataoperation. FTPHTTPClient-implementeringen avvisar dataanslutningar i aktivt läge. I passivt läge förhandlar den dataändpunkten med FTP och öppnar ytterligare en anslutning till HTTP-proxyn och begär sedan en CONNECT-tunnel till den ändpunkten.
Den andra tunneln förklarar en vanlig gräns: proxytillstånd för FTP-styrporten räcker inte. De tillåtna destinationerna och portarna måste omfatta serverns passiva dataändpunkter. En lyckad hälsning och inloggning bevisar bara att styrvägen fungerade.
Implementeringen tillhandahåller Basic-proxyautentisering när både proxyanvändarnamn och lösenord finns. Det skiljer sig från FTP USER/PASS-utbytet. En proxy som kräver en annan autentiseringsmekanism behöver en kompatibel connector; konstruktorn gör inte varje schema tillgängligt.
Commons Net dokumenterar denna klass som experimentell, så utvärdera den mot programmets och proxyns krav innan du antar den. Det är en FTP-klient, inte en FTPS- eller SFTP-klient. För FTPS med en tillgänglig SOCKS-tjänst är FTPSClient-socketproxygränssnittet en separat klientväg. CONNECT tillhandahåller vägen och krypterar inte själv FTP-uppgifter eller filinnehåll.
Håll fel kopplade till det steg som producerade dem: en HTTP-avvisning under tunneluppsättningen, en nekad FTP-inloggning eller ett FTP-/dataöverföringsfel. Att byta FTP-lösenord kan inte lösa en proxyregel som avvisar den passiva dataportten.