随笔-13  评论-76  文章-1  trackbacks-0
最近在写个小工具的时候需要通过网址得到域名,不知道怎么Uri里只有得到主机名的方法而没有得到域名的方法,于是只有自己实现一个,但是我感觉这个方法比较变态,希望拿出来和大家一起讨论下,看看有没有更好的方法?

例如:http://www.google.co.uk,应该返回google.co.uk,http://www.test.googlepages.com,应该返回googlepages.com

我的程序如下,拿出来讨论下,写的比较弱智,必须预先知道所有的域名后缀。
请大家告诉我好的方法:

private string GetDomain(string url)
        {
            
string host;
            Uri uri;
            
try
            {

                uri 
= new Uri(url);
                host 
= uri.Host + " ";
            }
            
catch
            {
                
return "";
            }

            
string[] BeReplacedStrs = new string[] { ".com.cn"".edu.cn"".net.cn"".org.cn"".co.jp"".gov.cn"".co.uk""ac.cn"".edu"".tv"".info"".com"".ac"".ag"".am"".at"".be"".biz"".bz"".cc"".cn"".com"".de"".es"".eu"".fm"".gs"".hk"".in"".info"".io"".it"".jp"".la"".md"".ms"".name"".net"".nl"".nu"".org"".pl"".ru"".sc"".se"".sg"".sh"".tc"".tk"".tv"".tw"".us"".co"".uk"".vc"".vg"".ws"".il"".li"".nz" };

            
foreach (string oneBeReplacedStr in BeReplacedStrs)
            {
                
string BeReplacedStr = oneBeReplacedStr + " ";
                
if (host.IndexOf(BeReplacedStr) != -1)
                {
                    host 
= host.Replace(BeReplacedStr, string.Empty);
                    
break;
                }
            }

            
int dotIndex = host.LastIndexOf(".");
            host 
= uri.Host.Substring(dotIndex + 1);
            
return host;
        }

谢谢了!
posted on 2006-09-26 00:56 C# hack 阅读(1659) 评论(14)  编辑 收藏 网摘 所属分类: CrazyRobot

评论:
#1楼 2006-09-26 04:56 | 小南[未注册用户]
可以通过正则表代式得到的,
源程序见:http://www.ipve.cn/?tid=154

  回复  引用    
#2楼 2006-09-26 07:14 | Vincent Yang      
这办法也太恶心了啊,根本不值得学习
  回复  引用  查看    
#3楼 2006-09-26 08:30 | 浮云      
@Vincent Yang
请你提供一个值得学习的方法。

  回复  引用  查看    
#4楼 2006-09-26 09:10 | 沐枫      
>>: 例如http://www.google.co.uk,应该返回google.co.ukhttp://www.test.googlepages.com,应该返回googlepages.com

这种说法是不恰当的。例如http://www.google.co.uk,其域名应该就是指的是 www.google.co.uk,而不是google.co.uk。

除非你需要的是域名注册服务机构分配的域名--关于这一点,各地的域名服务机构所能注册的域名也是不太一样的,不论是用正则或楼主的办法,都不能完全准确的做到。
最好的办法是:通过Whois服务来追诉注册域名。

  回复  引用  查看    
#5楼[楼主] 2006-09-27 00:48 | C# hack      
@小南
谢谢你的回复,但是这种没有可行性

@Vincent Yang
中国人就喜欢这样,唉,我正希望学习更好的方法,却有人没看清楚就留个言说:这办法也太恶心了啊,根本不值得学习。我期待得到的是值得学习的方法,而不是冷嘲热讽

@沐枫
你的办法确实可行,但是还是有点局限,因为处理的量比较大,而且处理速度要求比较快,所以连接whois的话,感觉还是有点别扭

  回复  引用  查看    
#6楼 2006-09-29 11:09 | 沐枫      
@C# hack
主要是看用途,离开用途谈这个问题,那是空谈。

所以,不能只是抽出代码来,而应该先谈谈应用环境。

  回复  引用  查看    
#7楼 2006-10-17 09:16 | woolenhy[未注册用户]
方法确实笨点了。
  回复  引用    
#8楼 2006-10-22 05:25 | stanleyxu[未注册用户]
一般来说除了是进行域名比较,否则www.google.com和test.google.com在程序里面都可以接受。主要的问题还是在2个域名比较上。

我觉得可以这样:比较2个域名的时候先检查2者是否相同。如果不同,那么字符串从后面往前比较。比如:
abc.google.com 和 test.google.com的直到.google.com是相同的。
google.com 和test.google.com也满足
而test.google.com和google.co.uk就不一样了。

你只要保证你程序里面不要直接比较2个域名地址,基本就行了。

  回复  引用    
#9楼 2007-04-16 20:15 | jyk
同情楼主。
我也在找这个方法,老板说 Uri 就可以解决,而且挺方便的。难道Uri不能办到吗?郁闷中,寻找答案中。

就是要找到一级域名,而且是不要www的。

  回复  引用    
#10楼 2007-08-20 22:19 | 吕昆[未注册用户]
直接用正则表达式,或者搜索"/"拦截,应该是一个好的方法:)
欢迎你也到我的博客上做客!

  回复  引用    
#11楼 2008-03-05 17:34 | ouyang76cn[未注册用户]
代码有个小Bug
string[] BeReplacedStrs 定内里的"ac.cn"应为".ac.cn"

  回复  引用    
#12楼 2008-12-24 16:34 | 大道无情      
没有好办法,我研究了几个月,这是唯一可行,最好的办法了,不要听其它人乱叫.;博主,我支持你,其实这是唯一的办法,我复制了你的代码到项目中使用
  回复  引用  查看    
#13楼 2008-12-24 16:40 | 大道无情      
楼主你的代码有严重问题,取出来为空 blog.sina.com.cn 我需要的是取出来为sina 而你却....为空, 还有正常出来 是sina.com.cn 这也不是我想需要的
  回复  引用  查看    
#14楼 2009-01-15 23:28 | aaaa[未注册用户]
private string GetDomain(string url)
{
string[] ss = url.Split('/');
return ss[2]
}

  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 514741




相关文章:

相关链接: