1

这是关于这篇文章的另一个问题:Python raw_input with force 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?>>

如果是这样,那会是什么样子?我尝试了一段时间 True: 和 if elif 语句,但我没有得到任何结果,我无休止地用谷歌搜索,没有结果,这就是我在这里发布这个问题的原因。

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

4

2 回答 2

0

用于测试 TLD 的实际 DNS 查找

哦,虽然我们正在研究它,但实际上测试 TLD 对 DNS 服务器的简短片段可能会变得很方便。我正在使用dnspython来自 Nominum 家伙的模块:

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
于 2013-05-29T20:39:03.570 回答
0

像这样的东西:

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
于 2013-05-29T19:23:51.863 回答