Apache Commons Net jinkludi FTPHTTPClient għal FTP permezz ta' proxy HTTP CONNECT. Il-karatteristika utli tiegħu mhix biss li jasal għall-port tal-login FTP: jistabbilixxi wkoll tunelli proxy għall-konnessjonijiet tad-data passivi li jużaw il-listi u t-trasferimenti tal-fajls.

Il-kostruttur jaċċetta l-endpoint tal-proxy u kredenzjali tal-proxy fakultattivi. Is-server FTP jibqa' l-argument ta' connect, u login jirċievi l-kont 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();
    }
}

Dan il-framment tat-trasferiment jassumi l-imports FTP ta' Commons Net, java.io.IOException, varjabbli ta' kredenzjali pprovduti mill-applikazzjoni u stream tal-output proprjetà tas-sejjieħ. remoteFile hu l-isem tal-fajl maħsub fuq in-naħa tas-server. L-applikazzjoni trid ukoll tagħlaq l-istream tal-output tagħha fil-mument xieraq.

Issettja l-mod passiv wara li tikkonnettja u qabel operazzjoni tad-data. L-implimentazzjoni ta' FTPHTTPClient tirrifjuta konnessjonijiet tad-data fil-mod attiv. Fil-mod passiv, tinnegozja l-endpoint tad-data ma' FTP u tiftaħ konnessjoni oħra mal-proxy HTTP, imbagħad titlob tunnel CONNECT lejn dak l-endpoint.

It-tieni tunnel jispjega limitu komuni: il-permess tal-proxy għall-port tal-kontroll FTP mhux biżżejjed. Id-destinazzjonijiet u l-ports permessi għandhom jinkludu l-endpoints tad-data passivi tas-server. Tislima u login ta' suċċess juru biss li r-rotta tal-kontroll ħadmet.

L-implimentazzjoni tipprovdi awtentikazzjoni tal-proxy Basic meta jkunu preżenti kemm l-isem tal-utent kif ukoll il-password tal-proxy. Dan hu differenti mill-iskambju FTP USER/PASS. Proxy li jeħtieġ mekkaniżmu ta' awtentikazzjoni ieħor jeħtieġ konnettur kompatibbli; il-kostruttur ma jagħmilx kull skema disponibbli.

Commons Net jiddokumenta din il-klassi bħala sperimentali, għalhekk evalwaha skont ir-rekwiżiti tal-applikazzjoni u tal-proxy qabel ma tadottaha. Hija klijent FTP, mhux klijent FTPS jew SFTP. Għal FTPS b'servizz SOCKS disponibbli, l-interface socket-proxy ta' FTPSClient hija rotta tal-klijent separata. CONNECT jipprovdi r-rotta u ma jinkriptax hu stess il-kredenzjali FTP jew il-kontenut tal-fajls.

Żomm l-iżbalji marbuta mal-istadju li pproduċiehom: rifjut HTTP waqt it-tħejjija tat-tunnel, rifjut tal-login FTP, jew falliment tat-trasferiment FTP/data. Is-sostituzzjoni tal-password FTP ma tistax issolvi politika tal-proxy li tirrifjuta l-port tad-data passiv.

Artikli relatati