2010-07-01 3 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

Что произойдет, если вы сделаете запрос FTP с неисправной машины с помощью Internet Explorer? –

+0

Работает отлично от IE –

ответ

1

Единственное, что я могу предложить, это установить Wireshark и точно отслеживать, что передается между клиентом и сервером, и сравнивать это между разными машинами. Если необходимо, чтобы получить более похожие сообщения между FTP и IE, измените пользовательский агент запроса. Есть ли какие-нибудь фанковые сети, например IP-разрешения?

4

Я столкнулся с той же проблемой.

Я уже провел мониторинг. Сначала я отслеживал связь для FTP-соединения через TotalCommander (он работает, поэтому это хорошая ссылка). После этого я также отслеживал свою программу. Я был потрясен происходящим.

Как-то HTTP-запрос был отправлен экземпляром FTPRequest! Я еще не решил проблему, но я приближаюсь. Я сообщу вам, если я еще что-нибудь узнаю.

Решение было очень простым для меня. Я просто добавил следующую строку после создания экземпляра запроса:

request.Proxy = null; 
+0

Это работает для меня !! –

Смежные вопросы