如何使用Python Requests处理过期SSL/TLS证书并区分两类连接错误
Python Requests处理过期证书及异常区分方案
要区分普通连接错误和TLS证书过期错误,只需要分层捕获Requests的异常类型,再对SSL类异常做内容关键词判断即可,无需关闭证书校验逻辑。
完整实现代码
import requests from requests.exceptions import RequestException, SSLError def conn(URL): try: # 保持默认verify=True开启证书校验,不要随意关闭 response = requests.get(URL, timeout=10) except SSLError as e: # 从异常信息中匹配证书过期的特征关键词 err_msg = str(e).lower() if "certificate has expired" in err_msg or "cert_has_expired" in err_msg: print(URL, "TLS证书已过期") return "CERT_EXPIRED" # 其他SSL类错误,比如证书不受信任、域名不匹配等,可根据需求自行划分归类 print(URL, "TLS证书验证失败") return "CERT_INVALID" except RequestException: print(URL, "普通连接错误") return "CONNECT_ERROR" print(URL, "连接成功,证书有效") return "SUCCESS" # 测试用例 # 有效证书站点 conn("https://www.google.com") # 不存在的域名 conn("https://unexistent-domain-example.com") # 过期证书站点 conn("https://expired-rsa-dv.ssl.com")
补充说明
- 代码返回值做了分类标识,你可以根据业务需求调整返回逻辑或者异常处理分支
- 所有SSL相关的错误都会先进入
SSLError捕获分支,除了过期之外的证书问题(比如自签名证书、域名不匹配、证书被吊销等)也可以通过增加关键词判断的方式做更细的分类 - 建议加上
timeout参数避免无响应的请求长时间卡住
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

