我需要驗證Python中的url並確保host/netloc組件是域名或ip v4/v6地址。Python - 驗證網址爲域名或IP地址
大多數StackOverflow Q &正如在這個一般的話題說「只使用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查找。 http://stackoverflow.com/questions/2805231/how-can-i-do-dns-lookups-in-python-including-referring-to-etc-hosts – drum
'999.999.999.999.999'不是一個有效的地址根據我在第一句中提到的ipv4或ipv6標準。 –