我花了一些时间搜索这个网站上的文章来找到我想要完成的内容,但到目前为止还没有运气。我正在我的客户端应用程序中执行Web请求,我想确保它通过代理工作。我将Fiddler2设置为代理服务器进行测试,我强迫它要求身份验证。
我基本上已经找到了如何使用代理:
Dim proxy As IWebProxy = WebRequest.GetSystemWebProxy()
webService.Proxy = proxy
我还尝试通过
获取代理的正确凭据 webService.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
并将其添加到配置部分下的app.config:
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>
这两种情况我得到相同的网络例外:
The request failed with HTTP status 407: Proxy Auth Required.
Fiddler2的代理具有1的用户名和1的密码,如果我以编程方式将这些作为凭证提供给请求,则该请求将成功进行身份验证。但是,它是否有理由无法从IE中获取凭据,就像抓取代理信息一样?
Fiddler的代理是否也是如此有效的例外?使用Windows身份验证的普通代理是否可以使用我尝试获取凭据的方式,并且有什么方法可以轻松地测试它吗?
答案 0 :(得分:2)
大多数,但不是所有需要身份验证的代理使用当前用户的Windows登录凭据。因此,使用DefaultCredentials通常是正确的做法。
话虽如此,代理可能可能要求自定义凭据(例如Fiddler想要“1:1”),当发生这种情况时,你的代码无法真正知道那些是什么凭证是。您可能有一些运气要求CredMan查看是否存在目标代理域的存储凭证,但这通常不起作用(假设它曾经这样做)。您通常不能“询问IE”凭据,因为作为一般规则,它不会持久存储凭据;相反,它会在会话的第一个请求中提示用户,并在会话的整个生命周期内将它们保存在内存中。
如果您希望您的软件在具有此类代理的环境中运行,则应捕获HTTP / 407响应并提示用户输入其代理凭据,您可以在重试时手动将其添加到请求中。
有关此主题的讨论,请参阅我的IEInternals博文。