Commons Net FTPHTTPClient: túnels HTTP proxy per a FTP passiu
Tuneli la connexió de control FTP i les connexions de dades passives a través d'un proxy HTTP amb el client dedicat de Commons Net.
Apache Commons Net inclou FTPHTTPClient per a FTP a través d'un proxy HTTP CONNECT. La seva característica útil no és només arribar al port d'inici de sessió FTP: també estableix túnels de proxy per a les connexions de dades passives que utilitzen els llistats i les transferències de fitxers.
El constructor accepta el punt final del proxy i credencials de proxy opcionals. El servidor FTP continua sent l'argument de connect, i login rep el compte 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();
}
}
Aquest fragment de transferència suposa les importacions FTP de Commons Net, java.io.IOException, variables de credencials proporcionades per l'aplicació i un flux de sortida propietat del cridador. remoteFile és el nom de fitxer previst al costat del servidor. L'aplicació també ha de tancar el seu flux de sortida en el moment adequat.
Establiu el mode passiu després de connectar i abans d'una operació de dades. La implementació de FTPHTTPClient rebutja les connexions de dades en mode actiu. En mode passiu, negocia el punt final de dades amb FTP i obre una altra connexió al proxy HTTP, i després sol·licita un túnel CONNECT a aquest punt final.
Aquest segon túnel explica un límit habitual: el permís del proxy per al port de control FTP no n'hi ha prou. Les destinacions i els ports permesos han d'incloure els punts finals de dades passives del servidor. Una salutació i un inici de sessió correctes només proven que la ruta de control ha funcionat.
La implementació proporciona autenticació de proxy Basic quan hi ha tant el nom d'usuari com la contrasenya del proxy. Això és diferent de l'intercanvi FTP USER/PASS. Un proxy que requereixi un altre mecanisme d'autenticació necessita un connector compatible; el constructor no fa disponible tots els esquemes.
Commons Net documenta aquesta classe com a experimental, així que avalueu-la segons els requisits de l'aplicació i del proxy abans d'adoptar-la. És un client FTP, no un client FTPS ni SFTP. Per a FTPS amb un servei SOCKS disponible, la interfície de sòcol-proxy de FTPSClient és una ruta de client separada. CONNECT proporciona la ruta i no xifra per si mateix les credencials FTP ni el contingut dels fitxers.
Manteniu els errors associats a l'etapa que els ha produït: un rebuig HTTP durant la configuració del túnel, una negativa d'inici de sessió FTP o un error de transferència FTP/dades. Substituir la contrasenya FTP no pot resoldre una política de proxy que rebutja el port de dades passiu.