Apache Commons Net садржи FTPHTTPClient за FTP кроз HTTP CONNECT прокси. Његова корисна особина није само достизање FTP порта за пријаву: успоставља и прокси тунеле за пасивне податковне везе које користе листе и преноси датотека.

Конструктор прихвата крајњу тачку проксија и опционе акредитиве проксија. FTP сервер остаје аргумент за connect, а login прима 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();
    }
}

Овај исечак преноса претпоставља FTP увозе Commons Net-а, java.io.IOException, променљиве акредитива које даје апликација и излазни ток у власништву позиваоца. remoteFile је предвиђено име датотеке на страни сервера. Апликација такође мора да затвори свој излазни ток у одговарајућем тренутку.

Поставите пасивни режим након повезивања и пре податковне операције. Имплементација FTPHTTPClient-а одбија податковне везе у активном режиму. У пасивном режиму преговара о крајњој тачки података са FTP-ом и отвара још једну везу према HTTP проксију, а затим тражи CONNECT тунел до те крајње тачке.

Тај други тунел објашњава честу границу: дозвола проксија за FTP контролни порт није довољна. Дозвољене дестинације и портови морају да укључе пасивне податковне крајње тачке сервера. Успешан поздрав и пријава доказују само да је контролна рута радила.

Имплементација пружа Basic прокси аутентификацију када су присутни и прокси корисничко име и лозинка. То се разликује од FTP USER/PASS размене. Прокси који захтева други механизам аутентификације треба компатибилан конектор; конструктор не чини сваку шему доступном.

Commons Net документује ову класу као експерименталну, па је процените према захтевима апликације и проксија пре усвајања. То је FTP клијент, а не FTPS или SFTP клијент. За FTPS са доступном SOCKS услугом socket-proxy интерфејс FTPSClient-а је одвојена клијентска путања. CONNECT пружа руту и сам не шифрује FTP акредитиве ни садржај датотека.

Држите грешке везане за фазу која их је произвела: HTTP одбијање током подешавања тунела, одбијање FTP пријаве или неуспех FTP/податковног преноса. Замена FTP лозинке не може да реши прокси политику која одбија пасивни податковни порт.

Повезани чланци