2010-09-02 42 views
3

據我瞭解,FtpWebRequest.Proxy屬性表示一個HTTP代理。我必須通過FTP代理向外部服務器發出FTP請求。是否可以通過FTP代理使用C#FtpWebRequest?

我有了這個迄今工作的唯一方法是通過創建使用Windows FTP命令的腳本和下載的方式。

是否有可能使用FtpWebRequest通過FTP代理下載文件?

回答

1

如果你有預算爲它 - 飛鏢做一些大的類此:

http://www.dart.com/ 或專門 http://www.dart.com/ptftpnet.aspx

+0

我不知道我能擺動它,但它看起來像一個體面的解決辦法。閱讀他們的網站也表明,它根本不可能使用.NET CLR中提供的FTP代理。 – 2010-09-02 10:35:49

-1

他們聲稱它可以列出,listdetails,並通過代理下載。不過,我無法將它與isa防火牆配合使用。所以我禁用了我的app.config中的默認代理併爲ForeFront/ISA客戶端添加了一個應用程序規則。要做到這一點,我創建一個文件c:\ programdata \微軟\防火牆客戶端2004 \的application.ini與內容:

[的applicationName] DisableEx = 0 禁用= 0 NameResolution = R

其中的applicationName是正在運行的exe減去.exe擴展名。

+0

我認爲這是指HTTP代理而不是FTP代理。 – 2010-10-26 07:03:37

1

我知道這是過去的方式在到期日,但是是的,我能得到的FtpWebRequest與FTP代理工作,通過設置URL的老招數來

"ftp://your.proxy.server/theFileToDownload")" 

然後設置你的網絡憑證

username="[email protected]" 

password="password". 

我記得這樣做回壞舊WININE T天,有時候這些老花樣仍然是最好的伎倆。

當然情況因人而異。

3

這裏是我以前用過的代碼,我應該包退我只測試了這對一個檢查點防火牆,所以格式的用戶和傳遞命令你的FTP代理可能不同。您的系統管理員將知道正確的格式。

FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(
     new Uri("ftp://FTP PROXY HOST/actual/path/to/file/on/remote/ftp/server")); 
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; 
reqFTP.UseBinary = true; 

reqFTP.Credentials = new NetworkCredential 
     ("REMOTE FTP [email protected] PROXY [email protected] FTP HOST" 
     , "REMOTE FTP [email protected] PROXY PASSWORD"); 
0

如果FTP代理允許通過USERPASS命令指定有關目標的所有信息,你可以使用Credentials property

通常情況下,你在表單[email protected]指定形式[email protected]@host和密碼,用戶名:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path"); 
request.Credentials = new NetworkCredential("[email protected]@host", "[email protected]"); 

如果代理不要求身份驗證,使用表單[email protected]password

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path"); 
request.Credentials = new NetworkCredential("[email protected]", "password"); 

但是,您的代理服務器也可能需要不同的語法,如:

  • 爲代理用戶和目標主機的用戶
  • OPEN命令
  • SITE命令

獨立USER命令在這些情況下,您不能使用FtpWebRequest。您必須改用第三方FTP客戶端庫。

例如與WinSCP .NET assembly,你可以使用:

// Setup session options 
SessionOptions sessionOptions = new SessionOptions 
{ 
    Protocol = Protocol.Ftp, 
    HostName = "host", 
    UserName = "user", 
    Password = "password", 
}; 

// Configure proxy 
sessionOptions.AddRawSettings("ProxyHost", "proxy"); 
sessionOptions.AddRawSettings("FtpProxyLogonType", "2"); 
sessionOptions.AddRawSettings("ProxyUsername", "proxyuser"); 
sessionOptions.AddRawSettings("ProxyPassword", "proxypassword"); 

using (Session session = new Session()) 
{ 
    // Connect 
    session.Open(sessionOptions); 

    // Your code 
} 

對於爲SessionOptions.AddRawSettings的選項,看raw settings

更容易爲configure the proxy settings in WinSCP GUI,併爲您提供generate C# FTP code template

請注意,WinSCP .NET程序集不是本機.NET庫。這是一個比控制檯應用程序更薄的.NET包裝器。

(我的WinSCP的作者)

相關問題