2011-07-07 48 views
1

org.apache.commons.net.ftp.FTPClientを使用してプロキシ経由でFTPサーバーに接続しようとしています。Javaによるプロキシ経由のFTP接続

Properties props = System.getProperties(); 
props.put("ftp.proxySet", "true"); 
// dummy details 
props.put("ftp.proxyHost", "proxy.example.server"); 
props.put("ftp.proxyPort", "8080"); 

接続を作成するには、私は、接続がプロキシを過ぎてそれを作るされていないことを意味かなり確信しているUnknownHostExceptionがが発生します。システムプロパティには、以下のとおり正しく設定得ているかなり確信して

この接続タイプのユーザー資格情報をどのようにプロキシに渡すことができますか。

私は正常に次のように同じプロキシを介してURLConnectionを作成できます。 Apache FTPClientに相当するものはありますか?

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

oracle java docsからチェックしたもの、ftpプロキシ・ホスト名は「ftp.proxHost」です。 'ftp.proxyHost'ではなく。 「y」はありません。なぜ私は知りません。私はftpプロキシを持っていないので、私はそれをテストできません。 [Javaのネットワーキングとプロキシ](https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html) – cinqS

答えて

0

は、私はあなたが使用する必要があると思うAuthenticator

private static class MyAuthenticator extends Authenticator { 
    private String username; 
    private String password; 
    public MyAuthenticator(String username, String password) { 
     super(); 
     this.username = username; 
     this.password = password; 
    } 
    @Override 
    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(username, password.toCharArray()); 
    } 
} 

public static void main(String[] args) { 
    Authenticator.setDefault(new MyAuthenticator("foo", "bar")); 
    System.setProperty("...", "..."); 
} 
+1

ありがとうございました。このアプローチを試して、まったく同じ例外を受けました。 it.sauronsoftware.ftp4j.FTPClientを試してみると、HTTPTunnelConnectorを使って正常に接続できます。 – ceej23

+0

ああ...あなたのプロキシはおそらくFTPプロキシではなくHTTP経由でHTTPプロキシをトンネリングするためです。あなたが解決策を見つけたことは良いことです! – MarcoS

2

どのようにプロキシを使用したい場合FTPHTTPClientの使用に関する。

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