2

我有以下代码通过 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

谁能告诉我为什么会这样?在所有客户端上运行的代码完全相同(包括相同的用户名和密码)?

4

2 回答 2

4

我遇到了同样的问题。

我已经做了一些监控。首先,我通过 TotalCommander 监控了 FTP 连接的通信(它有效,所以它是一个很好的参考)。之后,我还监视了我的程序。我对正在发生的事情感到震惊。

不知何故,HTTP 请求是由 FTPRequest 实例发送的!我还没有解决这个问题,但我越来越接近了。如果我发现任何新的东西,我会通知你的。

解决方案对我来说非常简单。在创建请求实例后,我刚刚添加了以下行:

request.Proxy = null;
于 2013-04-03T18:10:45.590 回答
1

我唯一可以建议的是安装 Wireshark 并准确监控客户端和服务器之间传输的内容,并在不同机器之间进行比较。如有必要,要使 FTP 和 IE 之间的消息更加相似,请更改请求的用户代理。是否有任何时髦的网络正在进行,例如基于 IP 的权限?

于 2010-07-01T17:15:19.560 回答