如何在.Net应用程序中使用IE代理服务器设置及其凭据

Til*_*zen 7 .net c# authentication proxy credentials

如何将保存的代理设置和凭据用作HttpWebRequests的默认设置?可以访问和使用代理设置,但不能使用凭据:

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
WebRequest.DefaultWebProxy = proxy;
Run Code Online (Sandbox Code Playgroud)

是否有使用凭据的权限?

它适用于通过NetworkCredential实例传递凭据:

proxy.Credentials = new NetworkCredential("username", "password");
Run Code Online (Sandbox Code Playgroud)

但我想使用操作系统/ IE中保存的那些.

编辑:

我正在使用第三方lib创建并调用应该通过代理传递的HttpWebRequests.这可能是问题的一部分吗?

使用带有此内容的App.Config文件也不起作用

<configuration>
  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
    </defaultProxy>
  </system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

Nic*_* H. 7

也许两个星期前,我有同样的问题!HTTP 407错误.我尝试了两个建议,设置网络凭据并在app.config中添加默认代理行,但都没有工作.奇怪也是因为我在去年写的一个vb应用程序上没有这个问题做了完全相同的事情,去一个网站并下载源代码作为字符串.当我这样做的时候,我遇到了这个问题但是在App.config中添加了defaultProxy行了!奇怪的.

这就是我能够解决这个问题的方法.

我没有创建代理,我将默认的代理(从app.config中提取)分配给webRequest的代理属性.然后我确保"UseDefaultCredentials"设置为"true".

HttpWebRequest request = (HttpWebRequest.Create(m.Url) as HttpWebRequest);                
                request.Proxy = WebRequest.DefaultWebProxy;
                request.UseDefaultCredentials = true;
Run Code Online (Sandbox Code Playgroud)

我将此添加到app.config(与上面的帖子相同).

  <system.net>
    <defaultProxy useDefaultCredentials="true"/>
  </system.net>
Run Code Online (Sandbox Code Playgroud)

这是踢球者(我希望我能解释为什么这解决了我的问题).在我创建请求并为代理分配正确的凭据后......我必须创建一个cookie容器并将其分配给我的Web请求.说真的,我不知道为什么这解决了这个问题因为我以前没必要这样做.

CookieContainer cc = new CookieContainer();
                request.CookieContainer = cc;
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助你.

这是完整的代码(减去app.config行):

        HttpWebRequest request = (HttpWebRequest.Create(m.Url) as HttpWebRequest);                
        request.Proxy = WebRequest.DefaultWebProxy;
        request.UseDefaultCredentials = true;

        CookieContainer cc = new CookieContainer();
        request.CookieContainer = cc;

        HttpWebResponse response = (request.GetResponse() as HttpWebResponse);
Run Code Online (Sandbox Code Playgroud)


Pat*_*man 1

正如 klugerama 已经建议的那样,您应该使用CredentialCache.DefaultNetworkCredentials.

它包含网络凭据,即使它们看起来是空的

我想粘贴这篇文章的另一个答案,并给出一个很好的解释:

从 CredentialCache.DefaultCredential 返回的 NetworkCredential 只是一个占位符。...此类型的内部 API 检查是否应使用集成身份验证。

所以你应该检查的事情是:

  • 确实存在问题还是您认为存在问题是因为缺少用户名和密码?
  • 检查哪个帐户用作“默认网络凭据”(检查凭据管理器控制面板)