Java 使用Apache FTPClient通过代理连接到FTP服务器

Java 使用Apache FTPClient通过代理连接到FTP服务器,java,apache,ftp,Java,Apache,Ftp,使用Apache FTPClient,我通常可以使用以下语句进行连接: FTPClient client = new FTPClient(); client.connect("ftp.myhost.com"); client.login("myUsername", "myPassword"); client.changeWorkingDirectory("/fileFeed"); client.setFileType(FTPClient.BINARY_FILE_TYPE); client.set

使用Apache FTPClient,我通常可以使用以下语句进行连接:

FTPClient client = new FTPClient();
client.connect("ftp.myhost.com");
client.login("myUsername", "myPassword");
client.changeWorkingDirectory("/fileFeed");
client.setFileType(FTPClient.BINARY_FILE_TYPE);
client.setFileTransferMode(FTPClient.BLOCK_TRANSFER_MODE);
以上工作正常,但现在我要连接到FTP站点,我必须使用代理服务器。我得到的指示是,我应该连接到代理服务器,并在用户名中指定实际的ftp服务器。因此,要登录,我将使用以下详细信息进行连接:

ftp         ftp.myProxyServer.com
username    myUsername@ftp.myhost.com
password    myPassword
我尝试使用命令提示符直接连接,我可以连接到ftp.myProxyServer.com主机,如果我指定,它会将我转发到预期的ftp站点myUsername@ftp.myhost.com作为主机用户名。问题在于,使用Apache FTPClient的Java不接受上述类型的连接:

FTPClient client = new FTPClient();
client.connect("ftp.myProxyServer.com");
client.login("myUsername@ftp.myhost.com", "myPassword");
client.changeWorkingDirectory("/fileFeed");
client.setFileType(FTPClient.BINARY_FILE_TYPE);
client.setFileTransferMode(FTPClient.BLOCK_TRANSFER_MODE);

是否有我遗漏的东西,或者上述内容不起作用?我试过直接连接,效果很好

ftp客户端通常处于主动ftp模式,如果您的代理无法启动tcp连接回您的客户端计算机(出于防火墙/DMZ原因),则您必须切换到被动模式:

(此外,我建议始终检查方法调用的返回代码,但为了清晰起见,可能会对它们进行修改)


很抱歉,您的问题未能及时得到解答…

client.connect(“ftp.myProxyServer.com”)此函数连接到FTP服务器,而不是代理服务器。Apache VFS如何?更改使用的FTP库实际上不是一个选项。
FTPClient client = new FTPClient();
client.connect("ftp.myProxyServer.com");
client.login("myUsername@ftp.myhost.com", "myPassword"); 
client.enterLocalPassiveMode(); //switch from active to passive
client.changeWorkingDirectory("/fileFeed");
...