2010-07-01 56 views
2

我有下面的代碼來獲取通過FTP文件:C#的FtpWebRequest錯誤403

 try 
     { 
      FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverPath); 

      request.KeepAlive = true; 
      request.UsePassive = true; 
      request.UseBinary = true; 

      request.Method = WebRequestMethods.Ftp.DownloadFile; 
      request.Credentials = new NetworkCredential(username, password); 

      using (FtpWebResponse response = (FtpWebResponse)request.GetResponse()) 
      using (Stream responseStream = response.GetResponseStream()) 
      using (StreamReader reader = new StreamReader(responseStream)) 
      using (StreamWriter destination = new StreamWriter(destinationFile)) 
      { 
       destination.Write(reader.ReadToEnd()); 
       destination.Flush(); 
      } 

      return 0; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

這在大多數情況下,但我有一個客戶端機器在那裏我得到一個異常:

The remote server returned an error 403: Forbidden 

有誰能告訴我爲什麼會出現這種情況?它與所有客戶端上運行的代碼完全相同(包括相同的用戶名和密碼)?

+0

如果使用Internet Explorer從發生故障的計算機發出FTP請求,會發生什麼情況? – 2010-07-01 08:09:27

+0

從IE – 2010-07-01 12:55:25

回答

1

我可以建議的唯一事情就是安裝Wireshark並監控客戶端和服務器之間的傳輸情況,並比較不同機器之間的傳輸情況。如有必要,爲了使FTP和IE之間的消息更加相似,請更改請求的用戶代理。是否有任何時髦的網絡正在進行,如基於IP的權限?

4

我遇到了同樣的問題。

我已經做了一些監測。 首先我通過TotalCommander監測FTP連接的通信(它的工作原理,所以它是一個很好的參考)。之後,我也監視了我的程序。我對所發生的事感到震驚。

不知何故HTTP請求是由FTPRequest實例發送的!我還沒有解決問題,但我越來越接近。如果我發現新的東西,我會通知你。

該解決方案對我來說非常簡單。我在創建請求實例後添加了以下行:

request.Proxy = null; 
+0

工作正常它適用於我! – 2017-06-27 09:42:35