簡體   English   中英

是否可以通過 FTP 代理使用 C# FtpWebRequest?

[英]Is it possible to use C# FtpWebRequest through a FTP proxy?

據我了解, FtpWebRequest.Proxy屬性表示一個 HTTP 代理。 我必須通過 FTP 代理向外部服務器發出 FTP 請求。

到目前為止,我讓這個工作的唯一方法是創建一個使用 Windows FTP 命令的腳本並以這種方式下載。

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

這是我之前使用過的代碼,需要注意的是,我只針對 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");

如果你有足夠的預算 - Dart 為此做了一些很棒的課程:

http://www.dart.com/或特別是http://www.dart.com/ptftpnet.aspx

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

通常,您以user@proxyuser@host的形式指定用戶名,以password@proxypassword的形式指定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 的作者)

我知道這已經過了截止日期,但是是的,我可以通過使用將 URL 設置為的舊技巧讓 FtpWebRequest 與 ftp 代理一起使用

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

然后將您的網絡憑據設置為

username="ftpUserName@ftp.realserver.com" 

password="password". 

我記得在過去的 WININET 糟糕的日子里這樣做過,有時舊技巧仍然是最好的技巧。

當然是YMMV。

他們聲稱可以通過代理列出、列出詳細信息和下載。 但是我無法讓它與 isa 防火牆一起使用。 所以我在 app.config 中禁用了默認代理,並為 ForeFront/ISA 客戶端添加了一個應用程序規則。 為此,我創建了一個文件 c:\\programdata\\microsoft\\firewall client 2004\\application.ini,其中包含以下內容:

[applicationName] DisableEx=0 Disable=0 NameResolution=R

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM