Commons Net FTPHTTPClient: 수동 FTP를 위한 HTTP 프록시 터널
Commons Net의 전용 클라이언트로 HTTP 프록시를 통해 FTP 제어와 수동 데이터 연결을 터널링합니다.
Apache Commons Net에는 HTTP CONNECT 프록시를 통한 FTP를 위한 FTPHTTPClient가 포함되어 있습니다. 유용한 점은 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();
}
}
이 전송 조각은 Commons Net의 FTP 임포트, java.io.IOException, 애플리케이션이 제공하는 자격 증명 변수, 호출자가 소유한 출력 스트림을 전제로 합니다. remoteFile는 서버 측의 의도된 파일 이름입니다. 애플리케이션은 적절한 시점에 자체 출력 스트림도 닫아야 합니다.
수동 모드는 연결 후 데이터 작업 전에 설정합니다. FTPHTTPClient 구현은 능동 모드의 데이터 연결을 거부합니다. 수동 모드에서는 FTP와 데이터 엔드포인트를 협상하고 HTTP 프록시로 또 다른 연결을 열어 해당 엔드포인트로 CONNECT 터널을 요청합니다.
두 번째 터널은 흔한 경계를 설명합니다. FTP 제어 포트에 대한 프록시 권한만으로는 충분하지 않습니다. 허용되는 대상과 포트에 서버의 수동 데이터 엔드포인트가 포함되어야 합니다. 인사와 로그인이 성공했다는 것은 제어 경로가 동작했다는 것만 증명합니다.
구현은 프록시 사용자 이름과 비밀번호가 모두 있을 때 Basic 프록시 인증을 제공합니다. 이는 FTP USER/PASS 교환과 다릅니다. 다른 인증 방식을 요구하는 프록시에는 호환되는 커넥터가 필요하며, 생성자가 모든 방식을 지원하지는 않습니다.
Commons Net은 이 클래스를 실험적으로 문서화하므로 도입 전에 애플리케이션과 프록시 요구 사항에 비추어 평가하십시오. FTP 클라이언트이며 FTPS나 SFTP 클라이언트가 아닙니다. SOCKS 서비스를 사용할 수 있는 FTPS의 경우 FTPSClient의 소켓 프록시 인터페이스가 별도의 클라이언트 경로입니다. CONNECT는 경로를 제공할 뿐 FTP 자격 증명이나 파일 내용 자체를 암호화하지는 않습니다.
오류는 그것을 발생시킨 단계에 연결해 두십시오. 터널 설정 중 HTTP 거부, FTP 로그인 거부, 또는 FTP/데이터 전송 실패입니다. FTP 비밀번호를 바꾸는 것으로는 수동 데이터 포트를 거부하는 프록시 정책을 해결할 수 없습니다.