用于确定TLD是否存在的Python代码,如果不存在则再次提示?

时间:2013-05-29 19:20:30

标签: python raw-input tld

这是关于这篇文章的另一个问题:Python raw_input with forced TLD?

我已经检查过字符串是否以TLD结尾,

TLD = ('.com', '.info', '.org', '.net')
if raw_input("Please enter a hostname").endswith(TLD):
# blah blah

但我试图将raw_input存储到变量中。正确的编码实践是否应该做以下事情:

TLD = ('.com', '.info', '.org', '.net')
hostName = raw_input(":").lower()
<<piece of code that determines if hostName does in fact end with a TLD?>>

如果是这样,那会是什么样子?我尝试了一段时间的真实:和if if elif声明,但我没有得到任何地方,我搜索无休止地没有结果,这就是为什么我在这里发布这个问题。

相关程序将获取主机名,例如google.com,确定其是否具有有效的TLD,剥离主机名的TLD off 并将其存储在hostNameshort中(两者都将在以后使用) ,如果它没有再次获得正确的TLD提示,强调它在输入时间内需要TLD,然后一旦继续就继续。

2 个答案:

答案 0 :(得分:1)

这样的事情:

TLD = ('.com', '.info', '.org', '.net')
hostName = raw_input(":").lower()
while not hostName.endswith(TLD):
    print "Incorrect input, Try again!"
    hostName = raw_input(":").lower()

演示:

:foo.bar
Incorrect input, Try again!
:google.in
Incorrect input, Try again!
:yahoo.com

答案 1 :(得分:1)

用于测试TLD的实际DNS查找

哦,虽然我们在这里,但实际测试顶级域名(TLD)对DNS服务器的简短片段可能会变得很方便。我正在使用Nominum人员的dnspython模块:

import dns.resolver

def testTLD(tld):
    try:
        dns.resolver.query(tld + '.', 'SOA')
        return True
    except dns.resolver.NXDOMAIN:
        return False

for tld in ('com', 'org', 'klonk', 'dk'):
    print "TLD \"{tld}\" exists: {bool}".format(tld=tld, bool=testTLD(tld))

它的运行方式如下:

TLD "com" exists: True
TLD "org" exists: True
TLD "klonk" exists: False
TLD "dk" exists: True