2012-02-19 162 views
3

我想通過FTP代理(在我身邊)使用FTP下載文件。 這是劇本我想在C#來實現:通過FTP代理FTP

On Commandline: 
ftp -i -s:get.ini CORPORATE_PROXY.com 
-----------get.ini------------ 
[email protected]_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#中,但有許多類型的代碼在互聯網上發現,我不能這樣做,以後打上面的腳本。

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 - 我無法找到anythere?任何想法,我應該去的方向,或者WebProxy是好的?

+0

支持FTP代理的自定義FTP客戶端組件將成爲您的朋友。 – 2012-02-19 11:33:03

回答

0

在過去,我已經使用Indy Project通過FTP代理來獲得。

0

嘗試在你的代碼示例使用WebRequest代替FtpWebRequest

通過這樣做,從客戶機到代理服務器的連接可以是HTTP,而從代理到目標服務器的連接FTP。代理將處理協議轉換,這種技術被稱爲FTP over HTTP。

也可以使用本地FTP代理,其中客戶端代理和代理服務器的連接是FTP。確保你的代理支持這個。

代理提供了一個單獨的代理端口來提供本機FTP代理連接。