簡體   English   中英

Python-驗證網址是否具有域名或IP地址

[英]Python - validate a url as having a domain name or ip address

我需要在Python中驗證網址,並確保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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM