Commons Net FTPHTTPClient: HTTP proxy tunely pre pasívne FTP
Tunelujte riadenie FTP a pasívne dátové spojenia cez HTTP proxy pomocou špecializovaného klienta Commons Net.
Apache Commons Net obsahuje FTPHTTPClient pre FTP cez HTTP CONNECT proxy. Jeho užitočná vlastnosť nie je len dosiahnutie prihlasovacieho portu FTP: vytvára aj proxy tunely pre pasívne dátové spojenia, ktoré používajú výpisy a prenosy súborov.
Konštruktor prijíma koncový bod proxy a voliteľné prihlasovacie údaje proxy. Server FTP zostáva argumentom connect a login prijíma účet FTP:
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();
}
}
Tento fragment prenosu predpokladá FTP importy Commons Net, java.io.IOException, premenné s prihlasovacími údajmi poskytnuté aplikáciou a výstupný tok vlastnený volajúcim. remoteFile je zamýšľaný názov súboru na strane servera. Aplikácia musí tiež zavrieť svoj výstupný tok v správnom okamihu.
Nastavte pasívny režim po pripojení a pred dátovou operáciou. Implementácia FTPHTTPClient odmieta dátové spojenia v aktívnom režime. V pasívnom režime vyjednáva koncový bod dát s FTP a otvorí ďalšie spojenie k HTTP proxy, potom požiada o tunel CONNECT k tomuto koncovému bodu.
Tento druhý tunel vysvetľuje bežnú hranicu: povolenie proxy pre riadiaci port FTP nestačí. Povolené ciele a porty musia zahŕňať pasívne dátové koncové body servera. Úspešné privítanie a prihlásenie dokazujú len to, že riadiaca trasa fungovala.
Implementácia poskytuje Basic autentifikáciu proxy, keď sú prítomné meno aj heslo proxy. To sa líši od výmeny FTP USER/PASS. Proxy vyžadujúca iný autentifikačný mechanizmus potrebuje kompatibilný konektor; konštruktor nesprístupňuje každú schému.
Commons Net dokumentuje túto triedu ako experimentálnu, preto ju pred prijatím vyhodnoťte podľa požiadaviek aplikácie a proxy. Je to klient FTP, nie klient FTPS alebo SFTP. Pre FTPS s dostupnou službou SOCKS je rozhranie socket-proxy triedy FTPSClient samostatná klientska cesta. CONNECT poskytuje trasu a sám nešifruje prihlasovacie údaje FTP ani obsah súborov.
Udržujte chyby spojené s fázou, ktorá ich spôsobila: odmietnutie HTTP pri nastavovaní tunela, odmietnutie prihlásenia FTP alebo zlyhanie prenosu FTP/dát. Nahradenie hesla FTP nemôže vyriešiť pravidlo proxy, ktoré odmieta pasívny dátový port.