用Java通过代理实现FTP连接

用Java通过代理实现FTP连接,java,proxy,ftp-client,apache-commons-net,Java,Proxy,Ftp Client,Apache Commons Net,我正在尝试使用org.apache.commons.net.FTP.FTPClient通过代理连接到FTP服务器。非常确定系统属性设置正确,如下所示: Properties props = System.getProperties(); props.put("ftp.proxySet", "true"); // dummy details props.put("ftp.proxyHost", "proxy.example.server"); props.put("ftp.proxyPort",

我正在尝试使用org.apache.commons.net.FTP.FTPClient通过代理连接到FTP服务器。非常确定系统属性设置正确,如下所示:

Properties props = System.getProperties();
props.put("ftp.proxySet", "true");
// dummy details
props.put("ftp.proxyHost", "proxy.example.server");
props.put("ftp.proxyPort", "8080");
创建一个连接会引发一个未知的异常,我很确定这意味着连接没有通过代理

如何将用户凭据传递到具有此连接类型的代理

顺便说一句,我可以使用以下方法通过同一个代理成功创建URLConnection:;ApacheFTPClient是否有等价物

conn = url.openConnection();
String password = "username:password";
String encodedPassword = new String(Base64.encodeBase64(password.getBytes()));
conn.setRequestProperty("Proxy-Authorization", encodedPassword);

我认为您需要使用:


当您想使用代理时,如何使用FTPHTTPClient

if(proxyHost !=null) {
  System.out.println("Using HTTP proxy server: " + proxyHost);
  ftp = new FTPHTTPClient(proxyHost, proxyPort, proxyUser, proxyPassword);
}
else {
  ftp = new FTPClient();
} 

谢谢你。尝试此方法并收到完全相同的异常。决定试用它。sauronsoftware.ftp4j.FTPClient,我能够使用他们的HTTPTunnelConnector.ah成功连接。。。这是因为您的代理可能不是FTP代理,而是HTTP代理通过HTTP隧道传输FTP。很高兴你找到了解决办法!我从OracleJava文档中检查的内容,ftp代理主机名为:
ftp.proxHost
。不是
ftp.proxyHost
。没有
y
。我不知道为什么,我不能测试它,因为我没有ftp代理。这个
if(proxyHost !=null) {
  System.out.println("Using HTTP proxy server: " + proxyHost);
  ftp = new FTPHTTPClient(proxyHost, proxyPort, proxyUser, proxyPassword);
}
else {
  ftp = new FTPClient();
}