Commons Net FTPHTTPClient: HTTP tarpinio serverio tuneliai pasyviam FTP
Tuneliuokite FTP valdymą ir pasyvius duomenų ryšius per HTTP tarpinį serverį naudodami specialų Commons Net klientą.
Apache Commons Net turi FTPHTTPClient, skirtą FTP per HTTP CONNECT tarpinį serverį. Naudingoji savybė yra ne tik pasiekti FTP prisijungimo prievadą: jis taip pat sukuria tarpinio serverio tunelius pasyviems duomenų ryšiams, kuriuos naudoja sąrašai ir failų perdavimai.
Konstruktorius priima tarpinio serverio galinį tašką ir pasirenkamus tarpinio serverio prisijungimo duomenis. FTP serveris lieka connect argumentu, o login gauna FTP paskyrą:
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();
}
}
Šis perdavimo fragmentas daro prielaidą, kad yra Commons Net FTP importai, java.io.IOException, programos pateikti prisijungimo duomenų kintamieji ir išvesties srautas, priklausantis kviečiančiajam. remoteFile yra numatytas failo pavadinimas serverio pusėje. Programa taip pat turi uždaryti savo išvesties srautą tinkamu metu.
Nustatykite pasyvų režimą po prisijungimo ir prieš duomenų operaciją. FTPHTTPClient įgyvendinimas atmeta duomenų ryšius aktyviu režimu. Pasyviu režimu jis derasi su FTP dėl duomenų galinio taško ir atidaro dar vieną ryšį su HTTP tarpiniu serveriu, tada prašo CONNECT tunelio į tą galinį tašką.
Antrasis tunelis paaiškina įprastą ribą: tarpinio serverio leidimas FTP valdymo prievadui nepakanka. Leidžiami tikslai ir prievadai turi apimti serverio pasyvius duomenų galinius taškus. Sėkmingas pasisveikinimas ir prisijungimas įrodo tik tai, kad valdymo maršrutas veikė.
Įgyvendinimas teikia Basic tarpinio serverio autentifikavimą, kai yra ir tarpinio serverio vartotojo vardas, ir slaptažodis. Tai skiriasi nuo FTP USER/PASS mainų. Tarpinis serveris, reikalaujantis kito autentifikavimo mechanizmo, turi turėti suderinamą jungtį; konstruktorius nepadaro prieinamos kiekvienos schemos.
Commons Net dokumentuoja šią klasę kaip eksperimentinę, todėl įvertinkite ją pagal programos ir tarpinio serverio reikalavimus prieš priimdami. Tai FTP klientas, o ne FTPS ar SFTP klientas. Jei yra SOCKS paslauga, FTPS atveju FTPSClient socket-proxy sąsaja yra atskiras kliento kelias. CONNECT suteikia maršrutą ir pats nešifruoja FTP prisijungimo duomenų ar failų turinio.
Išlaikykite klaidas susietas su etapu, kuriame jos atsirado: HTTP atmetimas nustatant tunelį, FTP prisijungimo atsisakymas arba FTP/duomenų perdavimo gedimas. Pakeisti FTP slaptažodį nepavyks išspręsti tarpinio serverio politikos, kuri atmeta pasyvų duomenų prievadą.