Commons Net FTPHTTPClient: HTTP-proxy alagutak passzív FTP-hez
Alagutazza az FTP-vezérlést és a passzív adatkapcsolatokat HTTP-proxyn keresztül a Commons Net dedikált kliensével.
Az Apache Commons Net tartalmazza a FTPHTTPClient osztályt FTP-hez HTTP CONNECT-proxyn keresztül. Hasznos tulajdonsága nem csupán az FTP bejelentkezési port elérése: proxialagutakat is létrehoz a listázások és fájlátvitelek által használt passzív adatkapcsolatokhoz.
A konstruktor fogadja a proxy végpontját és az opcionális proxy hitelesítő adatokat. Az FTP-kiszolgáló továbbra is a connect argumentuma, a login pedig az FTP-fiókot kapja:
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();
}
}
Ez az átviteli részlet a Commons Net FTP-importjait, a java.io.IOException, az alkalmazás által biztosított hitelesítő változókat és a hívó tulajdonában lévő kimeneti adatfolyamot feltételezi. A remoteFile a kiszolgáló oldali szándékolt fájlnév. Az alkalmazásnak a kimeneti adatfolyamát is le kell zárnia a megfelelő ponton.
Kapcsolódás után és adatművelet előtt állítsa be a passzív módot. A FTPHTTPClient implementációja aktív módban elutasítja az adatkapcsolatokat. Passzív módban egyezteti az adatvégpontot az FTP-vel, és egy másik kapcsolatot nyit a HTTP-proxy felé, majd CONNECT-alagutat kér ehhez a végponthoz.
Ez a második alagút egy gyakori határt magyaráz: a proxy engedélye az FTP-vezérlőportra nem elegendő. Az engedélyezett céloknak és portoknak tartalmazniuk kell a kiszolgáló passzív adatvégpontjait. A sikeres üdvözlés és bejelentkezés csak azt bizonyítja, hogy a vezérlőútvonal működött.
Az implementáció Basic proxyhitelesítést biztosít, ha a proxy felhasználóneve és jelszava is jelen van. Ez különbözik az FTP USER/PASS cserétől. Egy másik hitelesítési mechanizmust igénylő proxyhoz kompatibilis connector kell; a konstruktor nem tesz minden sémát elérhetővé.
A Commons Net ezt az osztályt kísérletiként dokumentálja, ezért az átvétel előtt értékelje az alkalmazás és a proxy követelményeihez képest. FTP-kliens, nem FTPS- vagy SFTP-kliens. Az FTPS-hez elérhető SOCKS-szolgáltatás esetén az FTPSClient socket-proxy felülete külön kliensútvonal. A CONNECT biztosítja az útvonalat, és önmagában nem titkosítja az FTP hitelesítő adatait vagy a fájltartalmat.
Tartsa a hibákat ahhoz a szakaszhoz kapcsolva, amelyik létrehozta őket: HTTP-elutasítás az alagút beállítása során, FTP-bejelentkezés megtagadása vagy FTP/adatátviteli hiba. Az FTP-jelszó cseréje nem oldja meg azt a proxyházirendet, amely elutasítja a passzív adatportot.