【问题标题】:Getting exact domain name from any URL [duplicate]从任何 URL 获取准确的域名 [重复]
【发布时间】:2011-05-12 20:55:56
【问题描述】:

我需要从任何 Url 中提取准确的域名。

例如,

网址:http://www.google.com --> 域名:google.com

网址:http://www.google.co.uk/path1/path2 --> 域名:google.co.uk

这在 c# 中怎么可能?该任务是否有完整的 TLD 列表或解析器?

【问题讨论】:

    标签: c# dns uri tld


    【解决方案1】:

    您可以使用Uri Class 访问 URI 的所有组件:

    var uri = new Uri("http://www.google.co.uk/path1/path2");
    
    var host = uri.Host;
    
    // host == "www.google.co.uk"
    

    但是,没有内置方法可以将子域“www”从“www.google.co.uk”中剥离。您需要实现自己的逻辑,例如

    var parts = host.ToLowerInvariant().Split('.');
    
    if (parts.Length >= 3 &&
        parts[parts.Length - 1] == "uk" &&
        parts[parts.Length - 2] == "co")
    {
        var result = parts[parts.Length - 3] + ".co.uk";
    
        // result == "google.co.uk"
    }
    

    【讨论】:

      【解决方案2】:

      用途:

      new Uri("http://www.stackoverflow.com/questions/5984361/c-sharp-getting-exact-domain-name-from-any-url?s=45faab89-43eb-41dc-aa5b-8a93f2eaeb74#new-answer").GetLeftPart(UriPartial.Authority).Replace("/www.", "/").Replace("http://", ""));
      

      输入:

      http://www.stackoverflow.com/questions/5984361/c-sharp-getting-exact-domain-name-from-any-url?s=45faab89-43eb-41dc-aa5b-8a93f2eaeb74#new-answer
      

      输出:

      stackoverflow.com
      

      也适用于以下情况。

      http://www.google.com → google.com

      http://www.google.co.uk/path1/path2 → google.co.uk

      http://localhost.intranet:88/path1/path2 → localhost.intranet:88

      http://www2.google.com → www2.google.com

      【讨论】:

      • 不行,new Uri("http://www.google.com").GetLeftPart(UriPartial.Authority).Replace("http://", "") ≡ "www.google.com"
      • 查看更新。感谢您的关注。
      • 对于不同的方案,你可以这样使用: Uri uri = new Uri(url);字符串域 = uri.GetLeftPart(UriPartial.Authority).Replace("/www.", "/").Replace(uri.GetLeftPart(UriPartial.Scheme), "");
      【解决方案3】:

      试试 System.Uri 类。

      http://msdn.microsoft.com/en-us/library/system.uri.aspx

      new Uri("http://www.google.co.uk/path1/path2").Host
      

      返回“www.google.co.uk”。从那里它是字符串操作。 :/

      【讨论】:

        【解决方案4】:

        使用:

        var uri =new Uri(Request.RawUrl); // to get the url from request or replace by your own
        var domain = uri.GetLeftPart( UriPartial.Authority );
        

        输入:

        Url = http://google.com/?search=true&q=how+to+use+google
        

        结果:

        domain = google.com 
        

        【讨论】:

        • 不起作用,RawUrl 不返回 .com 地址
        • @Nick:也请看下一行
        • 我使用了你的整个代码。此解决方案过去可能有效,但不适用于 .net 4。
        【解决方案5】:

        另一个变体,没有依赖关系:

        string GetDomainPart(string url)
        {
            var doubleSlashesIndex = url.IndexOf("://");
            var start = doubleSlashesIndex != -1 ? doubleSlashesIndex + "://".Length : 0;
            var end = url.IndexOf("/", start);
            if (end == -1)
                end = url.Length;
        
            string trimmed = url.Substring(start, end - start);
            if (trimmed.StartsWith("www."))
                trimmed = trimmed.Substring("www.".Length );
            return trimmed;
        }
        

        例子:

        http://www.google.com → google.com

        http://www.google.co.uk/path1/path2 → google.co.uk

        http://localhost.intranet:88/path1/path2 → localhost.intranet:88

        http://www2.google.com → www2.google.com

        【讨论】:

          猜你喜欢
          • 2017-12-14
          • 2014-05-31
          • 1970-01-01
          • 2013-05-04
          • 2011-01-10
          • 1970-01-01
          • 2010-10-08
          相关资源
          最近更新 更多