Commons Net FTPHTTPClient: đường hầm proxy HTTP cho FTP thụ động
Truyền điều khiển FTP và các kết nối dữ liệu thụ động qua proxy HTTP bằng ứng dụng khách chuyên dụng của Commons Net.
Apache Commons Net có FTPHTTPClient để dùng FTP qua proxy HTTP CONNECT. Tính năng hữu ích của nó không chỉ là đến được cổng đăng nhập FTP: nó còn thiết lập các đường hầm proxy cho những kết nối dữ liệu thụ động mà các lệnh liệt kê và truyền tệp sử dụng.
Hàm khởi tạo nhận điểm cuối proxy và thông tin đăng nhập proxy tùy chọn. Máy chủ FTP vẫn là đối số của connect, và login nhận tài khoản 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();
}
}
Đoạn truyền này giả định có các lệnh nhập FTP của Commons Net, java.io.IOException, các biến thông tin đăng nhập do ứng dụng cung cấp và một luồng đầu ra do bên gọi sở hữu. remoteFile là tên tệp dự kiến ở phía máy chủ. Ứng dụng cũng phải đóng luồng đầu ra của mình vào thời điểm thích hợp.
Đặt chế độ thụ động sau khi kết nối và trước một thao tác dữ liệu. Cách triển khai của FTPHTTPClient từ chối các kết nối dữ liệu ở chế độ chủ động. Ở chế độ thụ động, nó thương lượng điểm cuối dữ liệu với FTP và mở một kết nối khác tới proxy HTTP, rồi yêu cầu một đường hầm CONNECT tới điểm cuối đó.
Đường hầm thứ hai đó giải thích một ranh giới phổ biến: quyền của proxy cho cổng điều khiển FTP là không đủ. Các đích và cổng được phép phải bao gồm các điểm cuối dữ liệu thụ động của máy chủ. Lời chào và đăng nhập thành công chỉ chứng minh rằng tuyến điều khiển đã hoạt động.
Cách triển khai cung cấp xác thực proxy Basic khi có cả tên người dùng và mật khẩu proxy. Điều đó khác với trao đổi FTP USER/PASS. Một proxy yêu cầu cơ chế xác thực khác cần một trình kết nối tương thích; hàm khởi tạo không làm cho mọi sơ đồ đều khả dụng.
Commons Net ghi nhận lớp này là thử nghiệm, vì vậy hãy đánh giá nó so với các yêu cầu của ứng dụng và proxy trước khi áp dụng. Đây là ứng dụng khách FTP, không phải ứng dụng khách FTPS hay SFTP. Đối với FTPS khi có dịch vụ SOCKS, giao diện socket-proxy của FTPSClient là một tuyến khách riêng. CONNECT cung cấp tuyến và không tự mã hóa thông tin đăng nhập FTP hay nội dung tệp.
Giữ lỗi gắn với giai đoạn đã tạo ra nó: một lần từ chối HTTP khi thiết lập đường hầm, một lần từ chối đăng nhập FTP, hoặc một lỗi truyền FTP/dữ liệu. Thay mật khẩu FTP không thể giải quyết một chính sách proxy từ chối cổng dữ liệu thụ động.