Commons Net FTPHTTPClient: tunele proxy HTTP për FTP pasiv
Tuneloni kontrollin FTP dhe lidhjet pasive të të dhënave përmes një proxy HTTP me klientin e dedikuar të Commons Net.
Apache Commons Net përfshin FTPHTTPClient për FTP përmes një proxy HTTP CONNECT. Veçoria e tij e dobishme nuk është vetëm arritja e portës së hyrjes FTP: ai gjithashtu vendos tunele proxy për lidhjet pasive të të dhënave që përdoren nga listat dhe transferimet e skedarëve.
Konstruktori pranon pikën fundore të proxy-t dhe kredencialet opsionale të proxy-t. Serveri FTP mbetet argumenti i connect, dhe login merr llogarinë 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();
}
}
Ky fragment transferimi supozon importet FTP të Commons Net, java.io.IOException, variabla kredencialesh të ofruara nga aplikacioni dhe një rrjedhë dalëse në pronësi të thirrësit. remoteFile është emri i synuar i skedarit në anën e serverit. Aplikacioni duhet gjithashtu të mbyllë rrjedhën e tij dalëse në momentin e duhur.
Vendosni modalitetin pasiv pas lidhjes dhe para një operacioni të dhënash. Implementimi i FTPHTTPClient refuzon lidhjet e të dhënave në modalitetin aktiv. Në modalitetin pasiv, ai negocion pikën fundore të të dhënave me FTP dhe hap një lidhje tjetër me proxy-n HTTP, pastaj kërkon një tunel CONNECT drejt asaj pike fundore.
Ai tunel i dytë shpjegon një kufi të zakonshëm: leja e proxy-t për portën e kontrollit FTP nuk mjafton. Destinacionet dhe portat e lejuara duhet të përfshijnë pikat fundore pasive të të dhënave të serverit. Një përshëndetje dhe hyrje e suksesshme provojnë vetëm se rruga e kontrollit funksionoi.
Implementimi ofron vërtetim proxy Basic kur janë të pranishme si emri i përdoruesit ashtu edhe fjalëkalimi i proxy-t. Kjo është e ndryshme nga shkëmbimi FTP USER/PASS. Një proxy që kërkon një mekanizëm tjetër vërtetimi ka nevojë për një lidhës të pajtueshëm; konstruktori nuk i bën të disponueshme të gjitha skemat.
Commons Net e dokumenton këtë klasë si eksperimentale, prandaj vlerësojeni kundrejt kërkesave të aplikacionit dhe proxy-t përpara se ta miratoni. Është një klient FTP, jo një klient FTPS ose SFTP. Për FTPS me një shërbim SOCKS të disponueshëm, ndërfaqja socket-proxy e FTPSClient është një rrugë e veçantë klienti. CONNECT ofron rrugën dhe nuk i kripton vetë kredencialet FTP ose përmbajtjen e skedarëve.
Mbani gabimet të lidhura me fazën që i prodhoi: një refuzim HTTP gjatë konfigurimit të tunelit, një refuzim i hyrjes FTP ose një dështim i transferimit FTP/të dhënave. Zëvendësimi i fjalëkalimit FTP nuk mund të zgjidhë një politikë proxy që refuzon portën pasive të të dhënave.