来自FTPWebRequest-Class

时间:2017-01-26 09:40:37

标签: c# .net ftp

我在使用FtpWebRequest-Class时发现了一个奇怪的行为。我想创建一个FtpWebRequest来从德国气象服务中获取一些数据。所以我做某事。如下:

var request = (FtpWebRequest)WebRequest.Create(requestUri);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = Credentials;
var response = request.GetResponse() as FtpWebResponse;

使用此代码我会收到以下错误:

  

远程服务器返回错误:(407)代理验证   需要

这很清楚,我认为添加一个代理将解决这个问题,但我发现了一些奇怪的东西。这段代码正在运行:

var request = (FtpWebRequest)WebRequest.Create(requestUri);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = Credentials;
request.Proxy = null;
var response = request.GetResponse() as FtpWebResponse;

有人可以解释我吗?我使用调试器保存代理在两种情况下都为空。为什么我在第二种情况下没有收到错误消息,反之亦然?

1 个答案:

答案 0 :(得分:2)

默认情况下,WebRequest使用系统范围的代理(在IE设置中定义的代理)。如果该代理需要凭据,则需要提供凭据。通过将Proxy设置为null,您可以使用直接连接完全绕过代理。

您可以在the code中看到这一点。设置代理时,sets a private m_ProxyUserSet标志为true,在决定使用的实际代理时为checked later。如果您没有明确指定代理,则会隐式使用WebRequest.InternalDefaultWebProxy