Commons Net FTPHTTPClient: túneles de proxy HTTP para FTP pasivo
Tunela o control de FTP e as conexións de datos pasivas a través dun proxy HTTP co cliente dedicado de Commons Net.
Apache Commons Net inclúe FTPHTTPClient para FTP a través dun proxy HTTP CONNECT. A súa característica útil non é só chegar ao porto de inicio de sesión FTP: tamén establece túneles de proxy para as conexións de datos pasivas que usan as listas e as transferencias de ficheiros.
O construtor acepta o punto final do proxy e credenciais de proxy opcionais. O servidor FTP segue a ser o argumento de connect, e login recibe a conta 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();
}
}
Este fragmento de transferencia supón as importacións FTP de Commons Net, java.io.IOException, variables de credenciais proporcionadas pola aplicación e un fluxo de saída propiedade do chamador. remoteFile é o nome de ficheiro previsto no lado do servidor. A aplicación tamén debe pechar o seu fluxo de saída no momento axeitado.
Estableza o modo pasivo despois de conectar e antes dunha operación de datos. A implementación de FTPHTTPClient rexeita as conexións de datos en modo activo. En modo pasivo, negocia o punto final de datos con FTP e abre outra conexión ao proxy HTTP, e despois solicita un túnel CONNECT a ese punto final.
Ese segundo túnel explica un límite habitual: o permiso do proxy para o porto de control FTP non abonda. Os destinos e portos permitidos deben incluír os puntos finais de datos pasivos do servidor. Un saúdo e un inicio de sesión correctos só demostran que a ruta de control funcionou.
A implementación fornece autenticación de proxy Basic cando están presentes tanto o nome de usuario como o contrasinal do proxy. Iso é distinto do intercambio FTP USER/PASS. Un proxy que requira outro mecanismo de autenticación necesita un conector compatible; o construtor non pon a disposición todos os esquemas.
Commons Net documenta esta clase como experimental, así que avalíea fronte aos requisitos da aplicación e do proxy antes de adoptala. É un cliente FTP, non un cliente FTPS nin SFTP. Para FTPS cun servizo SOCKS dispoñible, a interface de socket-proxy de FTPSClient é unha ruta de cliente separada. CONNECT fornece a ruta e non cifra por si mesmo as credenciais FTP nin o contido dos ficheiros.
Manteña os erros asociados á etapa que os produciu: un rexeitamento HTTP durante a configuración do túnel, unha negativa de inicio de sesión FTP ou un fallo de transferencia FTP/datos. Substituír o contrasinal FTP non pode resolver unha política de proxy que rexeita o porto de datos pasivo.