我需要在Python中验证一个URL,并确保其中的host/netloc组件是域名或IPv4/v6地址。
大多数关于此主题的StackOverflow Q&A建议“只需使用urlparse”。但这不能适用于这种情况。
我已经使用urlparse验证了我确实拥有一个URL。
问题是我需要进一步验证从urlparse获取的.netloc,以确保我获得的是域名或IP地址,而不仅仅是主机名。
让我举个例子:
这个按预期/期望工作:
"
大多数关于此主题的StackOverflow Q&A建议“只需使用urlparse”。但这不能适用于这种情况。
我已经使用urlparse验证了我确实拥有一个URL。
问题是我需要进一步验证从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
但我经常遇到错别字,会导致格式错误的URL通过。 某人可能会在域名中意外地漏掉一个“.”:
>>> ## 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
http://999.999.999.999.999
是一个有效的地址。如果你想查看一个域名是否存在,你可以进行DNS查询。https://dev59.com/wHE85IYBdhLWcg3wYSZk - drum999.999.999.999.999
不符合 IPv4 或 IPv6 标准的有效地址。 - Jonathan Vanasco