【问题标题】:WebRequest GetResponse stuck with default proxyWebRequest GetResponse 卡在默认代理上
【发布时间】:2013-05-14 11:58: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);
        }

问题是这个变通方法代码从注册表中读取手动设置的代理。如果用户选择了“自动检测设置”,则它不起作用。

所以: - 在这种情况下如何找到代理地址? - 为什么默认代理不起作用?

【问题讨论】:

  • 第一次尝试还是第 n 次尝试时卡住?
  • 如果它适用于 Fiddler,则可能是代理问题...您可以从 IE 访问 google.com 吗?
  • @DanielMošmondor 在第一次尝试
  • @ThomasLevesque 是的,我可以从 IE 访问 google.com

标签: c# .net networking


【解决方案1】:

这似乎是 webproxy 自动检测的一个 bug。

顺便说一句,我发现了一个更优雅的解决方法,它允许我使用我的初始代码。 所以在阅读了thisthis 的问题后,我把这段代码放在了App.config 文件中

<system.net>
  <defaultProxy enabled="true" useDefaultCredentials="true" >
      <proxy autoDetect="True" scriptLocation="http://wpad/wpad.dat"/>
  </defaultProxy>
</system.net>

这允许程序跳过互联网选​​项设置并继续检查 wpad(类似于 firefox)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多