java FTP org.apache.commons.net.MalformedServerReplyException:截断的服务器回复:“220”
java FTP org.apache.commons.net.MalformedServerReplyException: Truncated server reply: '220 '
我正在使用 Java Apache Commons Net 库从 FTP 服务器下载文件。作为起点,我试图重新使用来自 https://www.codejava.net/java-se/networking/ftp/java-ftp-file-upload-tutorial-and-example. In general, the code executes without issue/exceptions however for one particular FTP server (ftp://ftp.nasdaqtrader.com/symboldirectory/nasdaqlisted.txt) 的代码,但我收到以下错误:
org.apache.commons.net.MalformedServerReplyException: Truncated server reply: '220 '
我的代码如下:
String server = "ftp.nasdaqtrader.com";
int port = 21;
String user = "anonymous";
String pass = "pw";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
// APPROACH #1: using retrieveFile(String, OutputStream)
String remoteFile1 = "/symboldirectory/nasdaqlisted.txt";
File downloadFile1 = new File("C:\filedirectory\nasdaqlisted.txt");
OutputStream outputStream1 =
new BufferedOutputStream(new FileOutputStream(downloadFile1));
boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
outputStream1.close();
if (success) {
System.out.println("File #1 has been downloaded successfully.");
}
} catch (IOException ex) {
System.out.println("Error: " + ex.getMessage());
ex.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
从我的 Windows 终端连接会产生以下结果:
C:\Computer>ftp ftp.nasdaqtrader.com
Connected to ftp.nasdaqtrader.com.
220
200 OPTS UTF8 command successful - UTF8 encoding now ON.
User (ftp.nasdaqtrader.com:(none)): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
ftp> quit
221 Goodbye.
对于类似的 FTP 服务器(NOAA 天气),代码通过 Windows 终端连接和下载无一例外地产生以下结果:
C:\Computer>ftp ftp.cdc.noaa.gov
Connected to ftp.cdc.noaa.gov.
220-**********************************************************************
220-**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING** *
220-* *
220-* This is a Department of Commerce (DOC) computer system. DOC *
220-* computer systems are provided for the processing of official U.S. *
220-* Government information only. Unauthorized access or use of this *
220-* computer system may subject violators to criminal, civil, and/or *
220-* administrative action. All data contained within DOC computer *
220-* systems is owned by the DOC, and may be audited, intercepted, *
220-* recorded, read, copied, or captured in any manner and disclosed in *
220-* any manner, by authorized personnel. THERE IS NO RIGHT OF PRIVACY *
220-* IN THIS SYSTEM. System personnel may disclose any potential *
220-* evidence of crime found on DOC computer systems to appropriate *
220-* authorities. USE OF THIS SYSTEM BY ANY USER, AUTHORIZED OR *
220-* UNAUTHORIZED CONSTITUTES CONSENT TO THIS AUDITING, INTERCEPTION, *
220-* RECORDING, READING, COPYING, CAPTURING, and DISCLOSURE OF COMPUTER *
220-* ACTIVITY. *
220-* *
220-**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING** *
220-**********************************************************************
220
200 Always in UTF8 mode.
User (ftp.cdc.noaa.gov:(none)): anonymous
331 Please specify the password.
Password:
230 Login successful.
因此,比较这两个回复,似乎 ftp.nasdaqtrader.com 根本没有提供适当的(标准?)220 回复(即被截断)。所以:
- 我是否正确识别了问题并且
- 处理这个问题的合适方法是什么?
谢谢!
Apache Commons Net 库认为来自服务器的 220
响应不符合 RFC 959(可能是正确的)。
如果要允许库与服务器通信,请调用 FTP.setStrictReplyParsing
:
ftpClient.setStrictReplyParsing(false);
我正在使用 Java Apache Commons Net 库从 FTP 服务器下载文件。作为起点,我试图重新使用来自 https://www.codejava.net/java-se/networking/ftp/java-ftp-file-upload-tutorial-and-example. In general, the code executes without issue/exceptions however for one particular FTP server (ftp://ftp.nasdaqtrader.com/symboldirectory/nasdaqlisted.txt) 的代码,但我收到以下错误:
org.apache.commons.net.MalformedServerReplyException: Truncated server reply: '220 '
我的代码如下:
String server = "ftp.nasdaqtrader.com";
int port = 21;
String user = "anonymous";
String pass = "pw";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
// APPROACH #1: using retrieveFile(String, OutputStream)
String remoteFile1 = "/symboldirectory/nasdaqlisted.txt";
File downloadFile1 = new File("C:\filedirectory\nasdaqlisted.txt");
OutputStream outputStream1 =
new BufferedOutputStream(new FileOutputStream(downloadFile1));
boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
outputStream1.close();
if (success) {
System.out.println("File #1 has been downloaded successfully.");
}
} catch (IOException ex) {
System.out.println("Error: " + ex.getMessage());
ex.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
从我的 Windows 终端连接会产生以下结果:
C:\Computer>ftp ftp.nasdaqtrader.com
Connected to ftp.nasdaqtrader.com.
220
200 OPTS UTF8 command successful - UTF8 encoding now ON.
User (ftp.nasdaqtrader.com:(none)): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 User logged in.
ftp> quit
221 Goodbye.
对于类似的 FTP 服务器(NOAA 天气),代码通过 Windows 终端连接和下载无一例外地产生以下结果:
C:\Computer>ftp ftp.cdc.noaa.gov
Connected to ftp.cdc.noaa.gov.
220-**********************************************************************
220-**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING** *
220-* *
220-* This is a Department of Commerce (DOC) computer system. DOC *
220-* computer systems are provided for the processing of official U.S. *
220-* Government information only. Unauthorized access or use of this *
220-* computer system may subject violators to criminal, civil, and/or *
220-* administrative action. All data contained within DOC computer *
220-* systems is owned by the DOC, and may be audited, intercepted, *
220-* recorded, read, copied, or captured in any manner and disclosed in *
220-* any manner, by authorized personnel. THERE IS NO RIGHT OF PRIVACY *
220-* IN THIS SYSTEM. System personnel may disclose any potential *
220-* evidence of crime found on DOC computer systems to appropriate *
220-* authorities. USE OF THIS SYSTEM BY ANY USER, AUTHORIZED OR *
220-* UNAUTHORIZED CONSTITUTES CONSENT TO THIS AUDITING, INTERCEPTION, *
220-* RECORDING, READING, COPYING, CAPTURING, and DISCLOSURE OF COMPUTER *
220-* ACTIVITY. *
220-* *
220-**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING** *
220-**********************************************************************
220
200 Always in UTF8 mode.
User (ftp.cdc.noaa.gov:(none)): anonymous
331 Please specify the password.
Password:
230 Login successful.
因此,比较这两个回复,似乎 ftp.nasdaqtrader.com 根本没有提供适当的(标准?)220 回复(即被截断)。所以:
- 我是否正确识别了问题并且
- 处理这个问题的合适方法是什么?
谢谢!
Apache Commons Net 库认为来自服务器的 220
响应不符合 RFC 959(可能是正确的)。
如果要允许库与服务器通信,请调用 FTP.setStrictReplyParsing
:
ftpClient.setStrictReplyParsing(false);