如何将保存的代理设置和凭据用作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>
答案 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检查,以查看是否应使用集成身份验证。
所以你应该检查的事情是:
答案 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>