我尝试使用FtpWebRequest
建立FTP连接。我需要通过squid代理服务器建立连接,这需要我先发送CONNECT
命令。
我已尝试过以下代码,但这会导致向代理服务器发出GET
请求,但拒绝这样做。
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" +server);
request.Credentials = new NetworkCredential(user, pwd);
var webproxy = new WebProxy(new Uri("http://" + proxy+ ":" + proxyPort));
webproxy.UseDefaultCredentials = true;
request.Proxy = webproxy;
request.UsePassive = true;
request.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
有什么方法可以使用FtpWebRequest
通过代理建立我的连接吗?
如果没有,你知道一个好的,希望免费的.NET FTP客户端,我可以使用吗? 非常感谢你的帮助。
答案 0 :(得分:0)
FtpWebRequest是一个"无会话"客户端,因此它不允许您在连接时与远程端进行交互。我检查了FtpWebRequest.cs的代码,我不知道如何让它发送一个" CONNECT"命令。
" CONNECT"命令似乎不是标准FTP命令集的一部分,所以我不能把我的大脑包装成一个FTP库应该做的事情。
我使用的面向会话的一个好的免费FTP客户端是" SSH.NET Library"在http://sshnet.codeplex.com/,但我相信它只支持sftp。 FtpWebRequest支持ftps和ftp。了解您的FTP服务器是否支持sftp,您可以使用SSH.NET。如果您唯一的选择是ftps,我可以报告我花了很长时间寻找一个免费的.net ftps客户端,然后我就使用了FtpWebRequest。
答案 1 :(得分:0)
FtpWebRequest
支持HTTP代理(CONNECT
命令是该支持的必需部分)。你的代码是正确的。
虽然HTTP代理不支持上传(它适用于所有其他操作)。所以也许你的实际问题是上传,而你没有提到它。
对于通过HTTP代理进行FTP上传,您必须使用第三方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", "3"); // HTTP proxy
sessionOptions.AddRawSettings("ProxyHost", "proxy");
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Upload file
string localFilePath = @"C:\path\file.txt";
string pathUpload = "/file.txt";
session.PutFiles(localFilePath, pathUpload).Check();
}
有关SessionOptions.AddRawSettings
的选项,请参阅raw settings。
更容易为您安装WinSCP GUI generate C# FTP code template。
请注意,WinSCP .NET程序集不是本机.NET库。它相当于控制台应用程序上的瘦.NET包装。
(我是WinSCP的作者)