我正在使用c#.net处理Windows应用程序。 我在FTP上使用FTPwebrequest类上传文件。当应用程序和互联网之间没有代理时,工作正常。但它在代理中不起作用。
FtpWebRequest reqFTP;
如果我使用reqFTP.Proxy=new webproxy("proxyservername",21);
然后它将显示错误消息“FTP命令在HTTP代理中不支持”。
我的代码就像这样
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create("ftp://uri");
reqFTP.Credentials = new NetworkCredential("username", "pwd");
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.UsePassive = true;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
while (contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
prbUpload.Value += contentLen;
}
strm.Close();
fs.Close();
答案 0 :(得分:1)
来自FtpWebRequest.Proxy属性文档:
如果指定的代理是HTTP 代理,只有
DownloadFile
,ListDirectory
,和ListDirectoryDetails
命令是 支撑。
因此,您无法使用FtpWebRequest
通过HTTP代理使用FTP上传文件。可能还有其他解决方案,请参阅讨论相同问题的this question。
答案 1 :(得分:0)
您正在使用HTTP代理。可能是您使用此代理浏览互联网。您不能将http代理用于ftp。要将该代理用于ftp,您需要为ftp配置代理服务器。
底线是,ftp需要ftp代理,浏览时需要http代理等。
因此,您通过代理发送ftp命令,但该代理仅支持http。所以,我认为错误信息现在对您更有意义
“ FTP命令不支持 HTTP代理”
答案 2 :(得分:0)
无论是uploadFile,DownloadFile,ListDirectory还是ListDirectoryDetails,以下代码都可以解决所有问题。
reqFTP.Proxy = new WebProxy();
它会将Proxy初始化为WebProxy Class的空实例,该实例将在内部跳过代理。