Apache Commons Net, HTTP CONNECT proxy üzerinden FTP için FTPHTTPClient sınıfını içerir. Yararlı özelliği yalnızca FTP oturum açma bağlantı noktasına ulaşmak değildir: listelemeler ve dosya aktarımları tarafından kullanılan pasif veri bağlantıları için de proxy tünelleri kurar.

Oluşturucu, proxy uç noktasını ve isteğe bağlı proxy kimlik bilgilerini kabul eder. FTP sunucusu connect için bağımsız değişken olarak kalır ve login FTP hesabını alır:

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

Bu aktarım parçası, Commons Net'in FTP içe aktarımlarını, java.io.IOException, uygulama tarafından sağlanan kimlik bilgisi değişkenlerini ve çağırana ait bir çıkış akışını varsayar. remoteFile sunucu tarafındaki amaçlanan dosya adıdır. Uygulama ayrıca çıkış akışını uygun anda kapatmalıdır.

Pasif modu bağlandıktan sonra ve bir veri işleminden önce ayarlayın. FTPHTTPClient uygulaması etkin moddaki veri bağlantılarını reddeder. Pasif modda, veri uç noktasını FTP ile görüşür ve HTTP proxy'ye başka bir bağlantı açar, ardından o uç noktaya bir CONNECT tüneli ister.

Bu ikinci tünel yaygın bir sınırı açıklar: FTP denetim bağlantı noktası için proxy izni yeterli değildir. İzin verilen hedefler ve bağlantı noktaları, sunucunun pasif veri uç noktalarını içermelidir. Başarılı bir karşılama ve oturum açma yalnızca denetim yolunun çalıştığını kanıtlar.

Uygulama, hem proxy kullanıcı adı hem de parolası mevcut olduğunda Basic proxy kimlik doğrulaması sağlar. Bu, FTP USER/PASS değişiminden farklıdır. Başka bir kimlik doğrulama mekanizması gerektiren bir proxy, uyumlu bir bağlayıcı gerektirir; oluşturucu her şemayı kullanılabilir kılmaz.

Commons Net bu sınıfı deneysel olarak belgeler, bu nedenle benimsemeden önce uygulamanın ve proxy'nin gereksinimlerine göre değerlendirin. Bu bir FTP istemcisidir, FTPS veya SFTP istemcisi değildir. Kullanılabilir bir SOCKS hizmeti olan FTPS için FTPSClient'ın soket-proxy arabirimi ayrı bir istemci yoludur. CONNECT yolu sağlar ve FTP kimlik bilgilerini veya dosya içeriğini kendisi şifrelemez.

Hataları, onları üreten aşamaya bağlı tutun: tünel kurulumu sırasında bir HTTP reddi, bir FTP oturum açma reddi veya bir FTP/veri aktarım hatası. FTP parolasını değiştirmek, pasif veri bağlantı noktasını reddeden bir proxy ilkesini çözemez.

İlgili makaleler