[英]Is there a way to use FtpWebRequest to authenticate to FTP using client certificates in C#?
[英]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 為此做了一些很棒的課程:
如果 FTP 代理允許通過USER
和PASS
命令指定有關目標的所有信息,則可以使用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@host
和password
:
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.