是否可以通过FTP代理使用C#FtpWebRequest?
据我了解, FtpWebRequest.Proxy
属性表示HTTP代理。 我必须通过FTP代理向外部服务器发出FTP请求。
到目前为止,我唯一能让它工作的方法是创建一个使用Windows FTP命令并以此方式下载的脚本。
是否可以使用FtpWebRequest
通过FTP代理下载文件?
如果你有预算–Dart会为此做一些很棒的课程:
这是我之前使用的代码,我应该注意我只针对Checkpoint防火墙进行了测试,因此对于您的FTP代理,USER和PASS命令的格式可能不同。 您的系统管理员将知道正确的格式。
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 USER@FTP PROXY USER@REMOTE FTP HOST" , "REMOTE FTP PASSWORD@FTP PROXY PASSWORD");
我知道这已经过了截止日期,但是,是的,我可以通过使用设置URL的旧技巧让FtpWebRequest与ftp代理一起工作
"ftp://your.proxy.server/theFileToDownload")"
然后将您的网络凭据设置为
username="ftpUserName@ftp.realserver.com"
和
password="password".
我记得在糟糕的旧WININET日子里做这件事,有时老技巧仍然是最好的伎俩。
YMMV当然。
如果FTP代理允许通过USER
和PASS
命令指定有关目标的所有信息,则可以使用Credentials
属性 。
通常,您在表单user@proxyuser@host
和password中以表格password@proxypassword
指定用户名:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path"); request.Credentials = new NetworkCredential("user@proxyuser@host", "password@proxypassword");
如果代理不需要身份validation,请使用表单user@host
和password
:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path"); request.Credentials = new NetworkCredential("user@host", "password");
但您的代理服务器可能还需要不同的语法,例如:
- 代理用户和目标主机用户的单独
USER
命令 -
OPEN
命令 -
SITE
命令
在这些情况下,您无法使用FtpWebRequest
。 您必须使用第三方FTP客户端库。
例如,使用WinSCP .NET程序集 ,您可以使用:
// 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
的选项,请参阅原始设置 。
更容易在WinSCP GUI中配置代理设置,并让它为您生成C#FTP代码模板 。
请注意,WinSCP .NET程序集不是本机.NET库。 它相当于控制台应用程序上的瘦.NET包装器。
(我是WinSCP的作者)
他们声称可以通过代理列出,列出详细信息和下载。 但是我无法使用isa防火墙。 所以我在app.config中禁用了默认代理,并为ForeFront / ISA客户端添加了一个应用程序规则。 为此,我创建了一个文件c:\ programdata \ microsoft \ firewall client 2004 \ application.ini,其中包含以下内容:
[applicationName] DisableEx = 0 Disable = 0 NameResolution = R.
其中applicationName是正在运行的exe减去.exe扩展名。