Python中无需正则表达式仅校验HTTPS URL的方法与模块问询
仅校验HTTPS协议URL的Python实现方案
完全不需要专门寻找带协议过滤功能的第三方模块,基于现有成熟工具补充一层硬协议判断即可实现需求,全程不需要手写正则,也能满足遇到非HTTPS协议URL就抛出错误的要求。
方案核心思路
把校验流程拆为两个独立步骤,解决通用URL校验工具不区分协议的问题:
- 第一步:借助成熟的URL解析/校验工具判断输入内容是否为结构合法的URL
- 第二步:单独提取URL的协议字段,强制要求其值严格等于
https,不满足则直接抛出错误
实现方式
1. 纯标准库零依赖实现
直接使用Python内置的urllib.parse模块完成解析和校验,不需要安装任何第三方包:
from urllib.parse import urlparse def validate_https_url(input_url: str): parsed_url = urlparse(input_url) # 校验协议是否为HTTPS if parsed_url.scheme != "https": raise ValueError(f"仅支持HTTPS协议URL,当前输入协议为:{parsed_url.scheme or '未识别'}") # 校验是否存在有效域名,避免无结构的普通字符串被误判 if not parsed_url.netloc: raise ValueError("输入内容不满足合法URL结构,缺少有效域名部分") return parsed_url
这个实现的校验效果:
- 输入
http://test.com会直接抛出协议不匹配的错误 - 输入
ftp://test.com会直接抛出协议不匹配的错误 - 输入
https://test.com/path会正常通过校验 - 输入普通无结构字符串比如
test123会抛出URL结构非法的错误
2. 复用现有validators模块的实现
如果你已经在使用validator-collection第三方库,不需要更换工具,只需要在通用校验的基础上补充HTTPS协议的判断即可:
import validators from urllib.parse import urlparse def validate_https_url(input_url: str): # 先复用第三方库完成通用URL合法性校验 is_valid = validators.url.url(input_url, public=False) if not is_valid: raise ValueError("输入不是结构合法的URL") # 补充HTTPS协议的强制校验 parsed_url = urlparse(input_url) if parsed_url.scheme != "https": raise ValueError("仅接受HTTPS协议的URL,不支持其他协议类型")
注意事项
- 校验协议时必须使用
urlparse解析后的scheme字段值做判断,不要手动匹配字符串里的https://子串,避免出现https-example.com这类拼写错误的内容被误判为合法 - 如果需要过滤内网/私有域名,只需要把调用
validators.url.url时的public=False参数改为public=True即可,不影响HTTPS协议的校验逻辑 - 整个流程没有手写正则的环节,所有结构合法性的判断都由经过长期验证的成熟工具完成,漏判风险远低于自写正则
内容的提问来源于stack exchange,提问作者ashakshan
相关产品推荐
相关产品推荐

