Ошибка 503 при загрузке файла через FTPClient (apache.commons.net) - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь написать фрагмент для загрузки определенного файла через 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
...