WebRequest GetResponse使用默认代理
本文关键字:默认 代理 GetResponse WebRequest | 更新日期: 2023-09-27 18:13:22
我有以下代码
private bool IsOnline()
{
try
{
var wr = WebRequest.CreateHttp("http://www.google.com");
wr.KeepAlive = false;
wr.Credentials = CredentialCache.DefaultCredentials;
using (wr.GetResponse())
{
return true;
}
}
catch
{
return false;
}
}
当我执行它时,它永远停留在GetResponse行上。
由于响应,我们发现问题是在默认代理。事实上,如果我以以下方式构造一个新的代理,它的工作原理
var registry = Registry.CurrentUser.OpenSubKey("Software''Microsoft''Windows''CurrentVersion''Internet Settings", false);
var proxy = (string)registry.GetValue("ProxyServer");
var isProxyEnabled = (int)registry.GetValue("ProxyEnable");
if (isProxyEnabled > 0)
{
wr.Proxy = new WebProxy(proxy, true, null, System.Net.CredentialCache.DefaultNetworkCredentials);
}
问题是此解决方法代码从注册表读取手动设置的代理。如果用户选择了"自动检测设置",它将不起作用。
:-在这种情况下如何找到代理地址?-为什么默认代理不起作用?
这似乎是webproxy自动检测的一个bug。
顺便说一下,我发现了一个更优雅的解决方案,它允许我使用我的初始代码。读完这些之后,我把这些代码放到了App.config文件<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" >
<proxy autoDetect="True" scriptLocation="http://wpad/wpad.dat"/>
</defaultProxy>
</system.net>
这允许程序跳过internet选项设置,直接检查wpad(类似于firefox)