gpt4 book ai didi

Python - 验证 url 是否具有域名或 ip 地址

转载 作者:行者123 更新时间:2023-11-28 22:48:49 25 4
gpt4 key购买 nike

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

关于这个一般主题的大多数 StackOverflow 问答都说“只需使用 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

最佳答案

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

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

关于Python - 验证 url 是否具有域名或 ip 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24708139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com