c#里没有根据网址提取域名部分的方法,这点可惜,后来我查看了一下其他语言,发现也基本上都没有类似的方法
本着自己做了10多年的站长,和站长工具,自己对域名也非常了解,今天自己写了一个提取域名部分的方法,如果有啥Bug还请大家指正
首我们先拿一个网址网址做为案例,比如
[C#] 纯文本查看 复制代码 string domain = "http://www.sufeinet.com/thread-3-1-1.html";
肉眼看这个网址的域名是
[C#] 纯文本查看 复制代码 sufeinet.com
第一步,截取协议部分
[C#] 纯文本查看 复制代码 if (!domain.ToLower().StartsWith("http://"))
domain = "http://" + domain;
第二步,通过Uri类提取主机部分
[C#] 纯文本查看 复制代码 Uri Url = new Uri(domain);
if (Url == null) return null;
var dotBits = Url.Host.Split('.');
第三步,根据主机长度截取后两位,我们都知道网址的主机部分是用。区分的,所以我们只需要截取后两位就是域名部分
[C#] 纯文本查看 复制代码 string DomainEnd = dotBits[dotBits.Length - 2] + '.' + dotBits[dotBits.Length - 1];
if (dotBits.Length < 3)
ret = Url.Host;
else if (RegexServices.DomainEndWith.Contains(DomainEnd))
ret = dotBits[dotBits.Length - 3] + '.' + dotBits[dotBits.Length - 2] + '.' + dotBits[dotBits.Length - 1];
else
ret = dotBits[dotBits.Length - 2] + '.' + dotBits[dotBits.Length - 1];
好了,这样就能正常取到域名了。
下面是全部代码部分大家可直接下载使用
[C#] 纯文本查看 复制代码
/// <summary>
/// 传入一个Http地址返回域名部分 wtqx123.blog.163.com [url]www.a.com.cn[/url] aa.cnblog.com
/// </summary>
/// <param name="domain">httpURL</param>
/// <returns>域名</returns>
public static string getDomain(string domain)
{
string ret = string.Empty;
try
{
if (!domain.ToLower().StartsWith("http://"))
domain = "http://" + domain;
Uri Url = new Uri(domain);
if (Url == null) return null;
var dotBits = Url.Host.Split('.');
string DomainEnd = dotBits[dotBits.Length - 2] + '.' + dotBits[dotBits.Length - 1];
if (dotBits.Length < 3)
ret = Url.Host;
else if (RegexServices.DomainEndWith.Contains(DomainEnd))
ret = dotBits[dotBits.Length - 3] + '.' + dotBits[dotBits.Length - 2] + '.' + dotBits[dotBits.Length - 1];
else
ret = dotBits[dotBits.Length - 2] + '.' + dotBits[dotBits.Length - 1];
}
catch { }
return ret;
}
|