Apache Commons Net enhavas FTPHTTPClient por FTP tra HTTP CONNECT-prokurilo. Ĝia utila trajto ne estas nur atingi la FTP-an salutporton: ĝi ankaŭ starigas prokurilajn tunelojn por la pasivaj datenaj konektoj uzataj de listoj kaj dosiertransigoj.

La konstruilo akceptas la prokurilan finpunkton kaj laŭbezonajn prokurilajn legitimojn. La FTP-servilo restas la argumento de connect, kaj login ricevas la FTP-konton:

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();
    }
}

Ĉi tiu transiga fragmento supozas la FTP-importojn de Commons Net, java.io.IOException, legitimajn variablojn provizitajn de la aplikaĵo kaj eligan fluon posedatan de la alvokanto. remoteFile estas la celata dosiernomo ĉe la servilo. La aplikaĵo ankaŭ devas fermi sian eligan fluon en la taŭga momento.

Agordu la pasivan reĝimon post konekto kaj antaŭ datena operacio. La efektivigo de FTPHTTPClient rifuzas datenajn konektojn en aktiva reĝimo. En pasiva reĝimo, ĝi interkonsentas la datenan finpunkton kun FTP kaj malfermas alian konekton al la HTTP-prokurilo, poste petas CONNECT-tunelon al tiu finpunkto.

Tiu dua tunelo klarigas oftan limon: prokurila permeso por la FTP-kontrola pordo ne sufiĉas. La permesitaj celoj kaj pordoj devas inkluzivi la pasivajn datenajn finpunktojn de la servilo. Sukcesa bonvenigo kaj ensaluto pruvas nur, ke la kontrola vojo funkciis.

La efektivigo provizas Basic-prokurilan aŭtentikigon kiam ĉeestas kaj la prokurila uzantnomo kaj pasvorto. Tio diferencas de la FTP USER/PASS-interŝanĝo. Prokurilo postulanta alian aŭtentikigmeĥanismon bezonas kongruan konektilon; la konstruilo ne faras ĉiun skemon disponebla.

Commons Net dokumentas ĉi tiun klason kiel eksperimentan, do taksu ĝin laŭ la postuloj de la aplikaĵo kaj de la prokurilo antaŭ ol adopti ĝin. Ĝi estas FTP-kliento, ne FTPS- aŭ SFTP-kliento. Por FTPS kun disponebla SOCKS-servo, la soklo-prokurila interfaco de FTPSClient estas aparta klienta vojo. CONNECT provizas la vojon kaj mem ne ĉifras FTP-legitimojn aŭ dosierenhavon.

Tenu erarojn ligitaj al la etapo, kiu produktis ilin: HTTP-rifuzo dum tunela agordo, FTP-ensaluta rifuzo aŭ FTP/datentransiga malsukceso. Anstataŭigi la FTP-pasvorton ne povas solvi prokurilan politikon, kiu rifuzas la pasivan datenan pordon.

Rilataj artikoloj