3

据我了解,该FtpWebRequest.Proxy属性表示 HTTP 代理。我必须通过 FTP 代理向外部服务器发出 FTP 请求。

到目前为止,我让它工作的唯一方法是创建一个使用 Windows FTP 命令的脚本并以这种方式下载。

是否可以使用FtpWebRequestFTP 代理下载文件?

4

5 回答 5

3

这是我以前使用过的代码,我应该注意我只针对检查点防火墙进行了测试,因此格式 USER 和 PASS 命令可能与您的 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 USER@FTP PROXY USER@REMOTE FTP HOST"
       , "REMOTE FTP PASSWORD@FTP PROXY PASSWORD");
于 2012-05-10T15:11:27.110 回答
2

USER如果 FTP 代理允许通过和命令指定有关目标的所有信息PASS,则可以使用Credentials属性.

通常,您在表单中指定用户名并在表单中指定user@proxyuser@host密码password@proxypassword

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@proxyuser@host", "password@proxypassword");

如果代理不需要身份验证,请使用表单user@hostpassword

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://proxy/path");
request.Credentials = new NetworkCredential("user@host", "password");

但是您的代理服务器可能还需要不同的语法,例如:

  • USER代理用户和目标主机用户的单独命令
  • OPEN命令
  • SITE命令

在这些情况下,您不能使用FtpWebRequest. 您必须改用第 3 方 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的作者)

于 2017-04-07T07:28:28.867 回答
1

如果你有预算的话——Dart 会为此做一些很棒的课程:

http://www.dart.com/ 或具体 为 http://www.dart.com/ptftpnet.aspx

于 2010-09-02T10:26:19.157 回答
1

我知道这已经过了截止日期,但是是的,我可以通过使用将 URL 设置为的旧技巧让 FtpWebRequest 与 ftp 代理一起工作

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

然后将您的网络凭据设置为

username="ftpUserName@ftp.realserver.com" 

password="password". 

我记得在糟糕的旧 WININET 时代这样做过,有时旧技巧仍然是最好的技巧。

当然是 YMMV。

于 2011-11-04T21:01:57.740 回答
-1

他们声称可以通过代理列出、列出详细信息和下载。但是我无法让它与 isa 防火墙一起使用。所以我在我的 app.config 中禁用了默认代理,并为 ForeFront/ISA 客户端添加了一个应用程序规则。为此,我创建了一个文件 c:\programdata\microsoft\firewall client 2004\application.ini,其内容为:

[应用程序名称] DisableEx=0 禁用=0 NameResolution=R

其中 applicationName 是正在运行的 exe 减去 .exe 扩展名。

于 2010-10-26T01:39:04.987 回答