【问题标题】:Detect DNS Redirect in .NET在 .NET 中检测 DNS 重定向
【发布时间】:2010-12-18 21:50:28
【问题描述】:

在我正在编写的 .NET 应用程序中,我需要检测特定 URL 是否可用。对于使用默认 DNS 服务器的普通用户,无效地址最终会抛出 WebException。但是,我在家里使用的是 OpenDNS。当我在家中请求无效地址时,自动 OpenDNS 重定向使 .NET 相信请求成功。如何检测 DNS 服务器何时未提供我请求的地址?

以下是部分代码:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://...");
request.AllowAutoRedirect = false;

try
{
    WebResponse response = request.GetResponse();

    using (Stream stream = response.GetResponseStream())
    {
        // Do work
        ...
    }
}
catch (WebException ex)
{
    // Handle normal errors
    ...
}

【问题讨论】:

    标签: c# .net url dns redirect


    【解决方案1】:

    如果 ResponseUri 与原始 URL 匹配,那么您能做的最好的事情就是查看响应文本,看看它是否“看起来”像 OpenDNS 页面。

    【讨论】:

      【解决方案2】:

      您是否尝试查看返回的HTTP status code

      HttpWebResponse response = (HttpWebResponse)request.GetResponse();
      
      if (response.StatusCode == HttpStatusCode.OK)
      {
          using (Stream stream = response.GetResponseStream())
          {
              // Do work
              ...
          }
      }
      else
      {
          // Error
      }
      

      【讨论】:

        【解决方案3】:

        检查 WebResponse.ResponseUri 值是否与请求的原始 URL 匹配。 http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.responseuri.aspx

        【讨论】:

        • AllowAutoRedirect = falseAllowAutoRedirect = false什么情况下ResponseUri不匹配原始URL?
        • 由于 OpenDNS 模拟了一个成功的请求,我怀疑您无需像 David 提到的那样专门寻找它就能分辨出来。
        • @dtb。当我将AllowAutoRedirect 设置为true 时,我刚刚意识到 ResponseUri 与请求的 url 不同。
        猜你喜欢
        • 2016-02-11
        • 2018-07-28
        • 2011-09-25
        • 2022-12-20
        • 1970-01-01
        • 2014-01-15
        • 2011-06-06
        • 2012-02-28
        • 1970-01-01
        相关资源
        最近更新 更多