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.

Kapcsolódó cikkek