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

时间:2014-02-24 10:16:28

标签: c# .net authentication proxy credentials

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

IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
WebRequest.DefaultWebProxy = proxy;

是否有使用凭据的权限?

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

proxy.Credentials = new NetworkCredential("username", "password");

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

修改

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

将App.Config文件与此内容一起使用不起作用

<configuration>
  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
    </defaultProxy>
  </system.net>
</configuration>

4 个答案:

答案 0 :(得分: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;

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

  <system.net>
    <defaultProxy useDefaultCredentials="true"/>
  </system.net>

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

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

我希望这会对你有所帮助。

这是完整的代码(减去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);

答案 1 :(得分:1)

正如klugerama已经建议你应该使用CredentialCache.DefaultNetworkCredentials

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

我想在this帖子上粘贴另一个答案,并附上一个很好的解释:

  

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

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

  • 由于缺少用户名和密码,确实存在问题,或者您认为有问题吗?
  • 检查哪个帐户用作&#39;默认网络凭据&#39; (查看Credential Manager控制面板)

答案 2 :(得分:1)

检查您的app.config(或web.config)文件(如果存在)。如果这些代理设置将在应用程序范围内进行,那么请确保该文件中包含以下内容(必要时创建):

<configuration>
  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
    </defaultProxy>
  </system.net>
</configuration>

您的代码中不需要任何其他内容;所有WebRequest实例都只使用代理。

如果您的代理设置将在应用程序范围内进行,请确保上述.config文件中的这些设置,并确保根据需要在代码中设置它们。

答案 3 :(得分:0)

这对我有用。当然,您必须添加URL。代码剪辑 - 它是从我制作的应用程序中提取的,该应用程序将XML Soap请求和响应发送到一个公司的Web服务,这些服务需要在其他公司Cisco Any-Connect网络上或之外使用。

public HttpWebRequest CreateWebRequest()
        {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url"); 
IWebProxy proxy = request.Proxy;
            if (proxy != null)
            {
                string proxyuri = proxy.GetProxy(request.RequestUri).ToString();
                request.UseDefaultCredentials = true;
                request.Proxy = new WebProxy(proxyuri, false);
                request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
            }
 return request;
 }

App.config文件:

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
    </defaultProxy>
</system.net>