據我瞭解,FtpWebRequest.Proxy
屬性表示一個HTTP代理。我必須通過FTP代理向外部服務器發出FTP請求。是否可以通過FTP代理使用C#FtpWebRequest?
我有了這個迄今工作的唯一方法是通過創建使用Windows FTP命令的腳本和下載的方式。
是否有可能使用FtpWebRequest
通過FTP代理下載文件?
據我瞭解,FtpWebRequest.Proxy
屬性表示一個HTTP代理。我必須通過FTP代理向外部服務器發出FTP請求。是否可以通過FTP代理使用C#FtpWebRequest?
我有了這個迄今工作的唯一方法是通過創建使用Windows FTP命令的腳本和下載的方式。
是否有可能使用FtpWebRequest
通過FTP代理下載文件?
如果你有預算爲它 - 飛鏢做一些大的類此:
他們聲稱它可以列出,listdetails,並通過代理下載。不過,我無法將它與isa防火牆配合使用。所以我禁用了我的app.config中的默認代理併爲ForeFront/ISA客戶端添加了一個應用程序規則。要做到這一點,我創建一個文件c:\ programdata \微軟\防火牆客戶端2004 \的application.ini與內容:
[的applicationName] DisableEx = 0 禁用= 0 NameResolution = R
其中的applicationName是正在運行的exe減去.exe擴展名。
我認爲這是指HTTP代理而不是FTP代理。 – 2010-10-26 07:03:37
我知道這是過去的方式在到期日,但是是的,我能得到的FtpWebRequest與FTP代理工作,通過設置URL的老招數來
"ftp://your.proxy.server/theFileToDownload")"
然後設置你的網絡憑證
username="[email protected]"
和
password="password".
我記得這樣做回壞舊WININE T天,有時候這些老花樣仍然是最好的伎倆。
當然情況因人而異。
這裏是我以前用過的代碼,我應該包退我只測試了這對一個檢查點防火牆,所以格式的用戶和傳遞命令你的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");
如果FTP代理允許通過USER
和PASS
命令指定有關目標的所有信息,你可以使用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的作者)
我不知道我能擺動它,但它看起來像一個體面的解決辦法。閱讀他們的網站也表明,它根本不可能使用.NET CLR中提供的FTP代理。 – 2010-09-02 10:35:49