C#-通过HTTP代理将文件上载到FTP
我正试图编写一个C程序,通过代理将文件上传到FTP 以下是我编写的代码:C#-通过HTTP代理将文件上载到FTP,c#,proxy,ftp,http-proxy,ftpwebrequest,C#,Proxy,Ftp,Http Proxy,Ftpwebrequest,我正试图编写一个C程序,通过代理将文件上传到FTP 以下是我编写的代码: public new bool Upload(string localFilePath, string pathUpload) { Stream FStream = null; bool retval = false; FileStream FlStream; try { FtpWebRequest FtpRequest = (F
public new bool Upload(string localFilePath, string pathUpload)
{
Stream FStream = null;
bool retval = false;
FileStream FlStream;
try
{
FtpWebRequest FtpRequest =
(FtpWebRequest) FtpWebRequest.Create(Uri + pathUpload);
FtpRequest.Credentials = new NetworkCredential(User, Password);
if (ProxyAddress != "" && ProxyAddress != null)
{
WebProxy ftpProxy = new WebProxy();
ftpProxy.Address = new System.Uri(ProxyAddress);
ftpProxy.Credentials =
new System.Net.NetworkCredential(ProxyUserId, ProxyPassword);
FtpRequest.Proxy = ftpProxy;
}
FtpRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
FStream = FtpRequest.GetRequestStream();
FileStream fs = File.OpenRead(localFilePath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
FStream.Write(buffer, 0, buffer.Length);
FStream.Close();
FStream.Dispose();
return retval = true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.ToString());
return false;
}
}
如果我传递代理地址,则表示在使用HTTP代理时不支持FTP命令
我已经尝试过按其他地方的建议强制执行FtpRequest.Proxy=null
(例如),但它给了我一个异常“无法连接到远程服务器”
我还尝试使用WebClient
类而不是FtpWebRequest
,但它给了我同样的问题
提前感谢您的帮助。对于某些操作,包括文件上载,
FtpWebRequest
不支持HTTP代理。很明显:
如果指定的代理是HTTP代理,则仅支持DownloadFile、ListDirectory和ListDirectoryDetails命令
对CodeProject的评论简直是胡说八道。你不能相信你在互联网上找到的一切
WebClient
在内部使用FtpWebRequest
,因此您也不能使用它
使用标准的.NET framework库,无法通过HTTP代理将文件上载到FTP
您必须使用第三方FTP库
例如,对于,您可以使用:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
};
// Configure proxy
sessionOptions.AddRawSettings("ProxyMethod", "3");
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();
}
有关的选项,请参见
(我是WinSCP的作者)