Commons Net FTPHTTPClient: HTTP-proksi-tonnels vir passiewe FTP
Tunnel FTP-beheer en passiewe datakonnekies deur 'n HTTP-proksi met Commons Net se toegewyde kliënt.
Apache Commons Net sluit FTPHTTPClient in vir FTP deur 'n HTTP CONNECT-proksi. Die nuttige kenmerk is nie net om die FTP-aanmeldpoort te bereik nie: dit vestig ook proksi-tonnels vir passiewe datakonnekies wat deur lyste en lêeroordragte gebruik word.
Die konstruktor aanvaar die proksi-eindpunt en opsionele proksi-aanmeldgegewens. Die FTP-bediener bly die argument vir connect, en login ontvang die FTP-rekening:
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();
}
}
Hierdie oordragfragment veronderstel Commons Net se FTP-invoere, java.io.IOException, aanmeldveranderlikes wat deur die toepassing verskaf word en 'n uitvoerstroom wat deur die oproeper besit word. remoteFile is die beoogde lêernaam aan die bedienerkant. Die toepassing moet ook sy uitvoerstroom op die regte punt sluit.
Stel passiewe modus ná verbinding en voor 'n data-bewerking. Die implementering van FTPHTTPClient verwerp datakonnekies in aktiewe modus. In passiewe modus onderhandel dit die data-eindpunt met FTP en open 'n ander konneksie na die HTTP-proksi, en versoek dan 'n CONNECT-tonnel na daardie eindpunt.
Daardie tweede tonnel verduidelik 'n algemene grens: proksi-toestemming vir die FTP-beheerpoort is nie genoeg nie. Die toegelate bestemmings en poorte moet die bediener se passiewe data-eindpunte insluit. 'n Suksesvolle groet en aanmelding bewys net dat die beheerroete gewerk het.
Die implementering verskaf Basic-proksiverifikasie wanneer beide proksi-gebruikersnaam en -wagwoord teenwoordig is. Dit verskil van die FTP USER/PASS-uitruiling. 'n Proksi wat 'n ander verifikasiemeganisme vereis, benodig 'n versoenbare konnektor; die konstruktor maak nie elke skema beskikbaar nie.
Commons Net dokumenteer hierdie klas as eksperimenteel, so evalueer dit teen die toepassing en proksi-vereistes voordat jy dit aanneem. Dit is 'n FTP-kliënt, nie 'n FTPS- of SFTP-kliënt nie. Vir FTPS met 'n beskikbare SOCKS-diens is FTPSClient se socket-proksi-koppelvlak 'n aparte kliëntpad. CONNECT verskaf die roete en versleutel nie self FTP-aanmeldgegewens of lêerinhoud nie.
Hou foute gekoppel aan die stadium wat dit veroorsaak het: 'n HTTP-weiering tydens tonnelopstelling, 'n FTP-aanmeldweiering, of 'n FTP/data-oordragfout. Om die FTP-wagwoord te vervang kan nie 'n proksi-beleid oplos wat die passiewe datapoort verwerp nie.