我在使用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;
有人可以解释我吗?我使用调试器保存代理在两种情况下都为空。为什么我在第二种情况下没有收到错误消息,反之亦然?
答案 0 :(得分:2)
默认情况下,WebRequest
使用系统范围的代理(在IE设置中定义的代理)。如果该代理需要凭据,则需要提供凭据。通过将Proxy
设置为null,您可以使用直接连接完全绕过代理。
您可以在the code中看到这一点。设置代理时,sets a private m_ProxyUserSet
标志为true,在决定使用的实际代理时为checked later。如果您没有明确指定代理,则会隐式使用WebRequest.InternalDefaultWebProxy