我正在尝试使用FTP通过FTP代理(在我这边)下载文件。 这是我试图在C#中实现的脚本:
On Commandline:
ftp -i -s:get.ini CORPORATE_PROXY.com
-----------get.ini------------
CORPORATE_PROXY_USER@CLIENT_FTP.com abc/user_name
CORPORATE_PROXY_PASSWORD
user_name_password
cd pub/linux/knoppix
get packages.txt
bye
-----------get.ini------------
abc/user_name
是我通过公司代理授予FTP权限的用户名。
我想在C#中实现上面的脚本,但是在使用Internet上发现的许多类型的代码后,我无法做到这一点。
FtpWebRequest request = FtpWebRequest.Create(new Uri(@"ftp://" + CORPORATE_PROXY.com + @"/" + Path.GetFileName(fileToUpload))) as FtpWebRequest;
request.UseBinary = true;
request.KeepAlive = false;
request.Method = WebRequestMethods.Ftp.UploadFile;
if (!string.IsNullOrEmpty(CORPORATE_PROXY_USER) && !string.IsNullOrEmpty(CORPORATE_PROXY_PASSWORD ))
request.Credentials = new NetworkCredential(CORPORATE_PROXY_USER, CORPORATE_PROXY_PASSWORD );
//Get physical file
FileInfo fi = new FileInfo(fileToUpload);
Byte[] contents = new Byte[fi.Length];
//Read file
FileStream fs = fi.OpenRead();
fs.Read(contents, 0, Convert.ToInt32(fi.Length));
fs.Close();
request.Proxy = new WebProxy("CLIENT_FTP.com");
request.Proxy.Credentials = new NetworkCredential(abc/user_name, user_name_password);
//Write file contents to FTP server
Stream rs = request.GetRequestStream();
rs.Write(contents, 0, Convert.ToInt32(fi.Length));
rs.Close();
FtpWebResponse response = request.GetResponse() as FtpWebResponse;
string statusDescription = response.StatusDescription;
response.Close();
return statusDescription;
主要的问题是,对于代理我正在使用WebProxy,而我怀疑我应该使用FTPProxy - 我找不到任何地方?我应该去哪个方向,或者WebProxy可以吗?
答案 0 :(得分:0)
过去我使用Indy Project来通过FTP代理。
答案 1 :(得分:0)
尝试在代码示例中使用WebRequest
代替FtpWebRequest
。
通过这样做,从客户端到代理的连接可以是HTTP,而从代理到目标服务器的连接是FTP。代理将处理协议转换,这种技术称为FTP over HTTP。
也可以使用本机FTP代理,其中客户端代理和代理服务器连接是FTP。确保您的代理支持此功能。
代理提供了一个单独的代理端口来提供本机FTP代理连接。