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.

Artikuj të ngjashëm