Я пытаюсь написать фрагмент для загрузки определенного файла через FTP через сеть, которая разрешает только https-соединение (для других мне нужно использовать определенный прокси-сервер).
файл, который я хочу скачать: ftp: //europabarbarorum.org/EB1.1.exe.torrent
Вы можете скачать его без входа в систему.
Где я делаю не так?
Вот что я получаю, успешно загружая файл с помощью Google Chrome (с прокси-сервером):
GENERAL
Request URL: ftp://europabarbarorum.org/EB1.1.exe.torrent
Request Method: GET
Status Code: 200 OK
Remote Address: 10.7.255.29:8080
Referrer Policy: no-referrer-when-downgrade
RESPONSE HEADERS
Age: 11
Connection: keep-alive
Content-Length: 16169
Content-Type: text/plain
Date: Fri, 25 Jan 2019 16:05:50 GMT
Last-Modified: Tue, 13 Jan 2009 07:51:15 GMT
Mime-Version: 1.0
Server: squid/3.5.21
Via: 1.1 ced01squidp02.replynet.prv (squid/3.5.21)
X-Cache: HIT from ced01squidp02.replynet.prv
X-Cache-Lookup: HIT from ced01squidp02.replynet.prv:8080
Resource interpreted as Document but transferred with MIME type application/octet-stream: "ftp://europabarbarorum.org/EB1.1.exe.torrent".
Я пытался использовать FTPHTTPClient для загрузки файла с использованием прокси-сервера, но безуспешно.
String url = "ftp://europabarbarorum.org/EB1.1.exe.torrent";
String server = "europabarbarorum.org";
String filePath = "/EB1.1.exe.torrent";
byte[] rtn = null;
boolean success;
int port = 21;
String prox = "proxy.reply.it";
int proxport = 8080;
FTPHTTPClient ftpClient = new FTPHTTPClient(prox, proxport);
try (ByteArrayOutputStream bout = new ByteArrayOutputStream()) {
ftpClient.connect(server);
ftpClient.getReplyCode(); // 220
ftpClient.enterLocalPassiveMode();
ftpClient.getReplyCode(); // 503
ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // false
ftpClient.getReplyCode(); // 503
ftpClient.retrieveFile(filePath, bout); //false
rtn = bout.toByteArray();
} catch (IOException e) {
//no exception caught
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException e) {
//no exception caught
}
}
if(rtn != null)
for (byte b : rtn)
System.out.print(b+" "); // nothing here