【问题标题】:C# FtpWebRequest Error 403C# FtpWebRequest 错误 403
【发布时间】:2010-07-01 08:06:02
【问题描述】:

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

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

【问题讨论】:

  • 如果您使用 Internet Explorer 从故障机器发出 FTP 请求会怎样?

标签: c# ftp ftpwebrequest


【解决方案1】:

我也遇到了同样的问题。

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

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

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

request.Proxy = null;

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 2013-11-10
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多