C # FtpWebRequest Ошибка 403 - PullRequest
2 голосов
/ 01 июля 2010

У меня есть следующий код для извлечения файла через FTP:

        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

Может кто-нибудь сказать мне, почему это может иметь место? Это один и тот же код на всех клиентах (включая одно и то же имя пользователя и пароль)?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2013

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

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

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

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

request.Proxy = null;
1 голос
/ 01 июля 2010

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

...