2013-02-01 49 views
3

我花了一段时间搜索本网站上的文章,找到我正在尝试完成的内容,但到目前为止没有运气。我正在客户端应用程序中执行Web请求,并且我想确保它通过代理工作。我将Fiddler2设置为代理服务器进行测试,并迫使它需要身份验证。.net通过代理网络请求,自动检测凭据

我已经基本上是想出如何让代理使用:

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> 

这两种情况我都得到相同的web异常:

The request failed with HTTP status 407: Proxy Auth Required. 

Fiddler2的代理有1名和1密码,如果我把这些作为凭证以编程方式请求,该请求将成功进行身份验证。但是,是否有一个原因,即它没有抓取来自IE的证书,就像抓取代理信息一样?

Fiddler的代理是如何工作的例外?使用Windows身份验证的普通代理是否可以正常使用我尝试获取凭据的方式,并且有任何方法可以轻松测试吗?

+0

首先我想WebRequest使用IE代理是默认的。不是吗?!你有没有尝试过,而没有自己定义代理? (并在Internet选项中使用正确的代理设置) –

+0

是的,我也试过,并得到了相同的结果。我可以为用户添加一个表单,以便为我输入该信息,但对我而言,我可以通过编程方式获得该信息。 –

回答

2

大多数,但不需要身份验证使用当前用户的Windows登录凭据,所有代理。因此,使用DefaultCredentials通常是正确的。

话虽如此,它是一个代理,要求定制凭证可能(小提琴手要“1:1”,例如),这时有没有办法让你的代码才能真正知道这些凭据。您可能可能有一些运气要求CredMan查看是否存在用于目标代理领域的存储凭证,但这往往不起作用(假设它曾经这样做)。您通常不能“询问IE”凭据,因为通常情况下,它不会持续存储凭据;相反,它会根据会话的第一个请求提示用户,并在会话的整个生命周期中将它们保存在内存中。

如果您希望软件在具有此类代理的环境中运行,应该捕获HTTP/407响应并提示用户输入其代理凭据,您可以在重试时手动添加该请求。

查看我的IEInternals博客文章讨论此主题。