我已使用以下代码成功将文件上传到我的FTP服务器。
using (WebClient client = new WebClient())
{
client.Credentials = new NetworkCredential("USER", "PASS");
client.UploadFile("ftp://adress/" + filename, "STOR", file);
}
但是,这不适用于受防火墙保护的网络。 连接必须通过SOCKS代理才能绕过防火墙。
如何做到这一点? 如何使用http://mentalis.org/或任何其他库的第三方库建立与SOCKS代理的连接并将文件上传到服务器?
答案 0 :(得分:2)
.NET框架FTP客户端(FtpWebRequest
或WebClient
)无法使用SOCKS代理进行连接,仅HTTP [download only] and ISA client proxies are supported:
FtpWebRequest类支持HTTP和ISA防火墙客户端代理。
如果指定的代理是HTTP代理,则仅支持DownloadFile,ListDirectory和ListDirectoryDetails命令。
因此您需要使用第三方FTP库。
例如,使用WinSCP .NET assembly,您可以使用:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
};
// Configure proxy
sessionOptions.AddRawSettings("ProxyMethod", "2"); // SOCKS5 proxy
sessionOptions.AddRawSettings("ProxyHost", "proxy");
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Your code
}
有关SessionOptions.AddRawSettings
的选项,请参阅raw settings。
更容易为您安装WinSCP GUI generate C# FTP code template。
请注意,WinSCP .NET程序集不是本机.NET库。它相当于控制台应用程序上的瘦.NET包装。
(我是WinSCP的作者)