Python - 验证网址是否具有域名或IP地址

时间:2014-07-11 23:44:42

标签: python url

我需要验证Python中的url并确保host / netloc组件是域名或ip v4 / v6地址。

大多数StackOverflow Q&在这个一般主题上说“只使用urlparse”。这不适用于这种情况。

我已经使用urlparse来验证我确实有一个网址。

问题是我需要进一步验证来自urlparse的.netloc以确保我获取域名或IP地址,而不仅仅是主机名。

让我说明一下:

>>> from urlparse import urlparse

这符合预期/期望:

>>> ## domain name
>>> print urlparse("http://example.com").netloc
example.com

>>> ## ipv4
>>> print urlparse("http://255.255.255.255").netloc
255.255.255.255

>>> ## acceptable hostname
>>> print urlparse("http://localhost").netloc
localhost

但是我经常遇到一个错误的错误链接。有人可能不小心错过了'。'在域名中:

>>> ## valid hostname, but unacceptable
>>> print urlparse("http://examplecom").netloc
examplecom

examplecom确实是一个有效的主机名,可能存在于网络上,但它不是有效的域名。

似乎没有对IP地址强制执行任何规则:

>>> print urlparse("http://266.266.266.266").netloc
266.266.266.266

>>> print urlparse("http://999.999.999.999.999").netloc
999.999.999.999.999

1 个答案:

答案 0 :(得分:4)

我认为这可以满足您的需求:

import socket
def good_netloc(netloc):
    try:
        socket.gethostbyname(netloc)
        return True
    except:
        return False

print good_netloc("google.com")
print good_netloc("googlecom")
print good_netloc("10.1.1.1")
print good_netloc("999.999.999.999")

此代码段的输出为:

lap:~$ python tmp.py
True
False
True
False