这不是爬虫代码写错了,而是本地python环境无法信任目标网站ssl证书,根本原因是证书信任链断裂、根证书过期或ca证书包缺失;verify=false虽可快速绕过报错,但会跳过全部tls校验,导致中间人攻击风险,仅限本地调试,生产环境必须通过配置自定义ca证书或更新系统证书库解决。

Requests发起HTTPS请求时抛出SSLError怎么办
直接禁用证书验证(verify=False)能快速绕过错误,但会带来中间人攻击风险,不是生产环境的解法。真正要解决的是证书链不全、自签名证书或系统CA证书库过旧等问题。
为什么verify=False不推荐在生产环境使用
它会让Requests跳过整个TLS证书校验流程,包括域名匹配、有效期、签发机构可信度等。一旦服务端证书被劫持或伪造,客户端完全无法察觉。
-
verify=False会触发InsecureRequestWarning警告,需手动屏蔽(不建议) - 某些企业内网API用自签名证书,此时应把该证书加入信任列表,而非全局关闭验证
- Python 3.12+ 默认启用更严格的证书策略,
verify=False可能掩盖底层配置问题
如何正确加载自签名或私有CA证书
把根证书或中间证书的PEM文件路径传给verify参数,Requests会用它替代系统默认CA包进行校验。
- 证书文件必须是PEM格式(以
-----BEGIN CERTIFICATE-----开头) - 调用时写成:
requests.get("https://api.example.com", verify="/path/to/ca-bundle.pem") - 多个证书可合并到一个PEM文件中,顺序不限;也可用
REQUESTS_CA_BUNDLE环境变量全局指定 - Linux/macOS下可复用系统证书路径,如
/etc/ssl/certs/ca-certificates.crt(Debian系)或/etc/pki/tls/certs/ca-bundle.crt(RHEL系)
Requests找不到系统CA证书怎么办
常见于Windows上的Miniconda/Anaconda环境或Docker容器中——这些环境不自带完整CA证书集,导致verify=True(默认)时直接失败。
- 先确认是否真缺证书:运行
python -m requests.help,检查certs字段是否为空或指向无效路径 - 临时修复:用
pip install certifi,然后显式指定verify=certifi.where() - 长期方案:在容器镜像或部署脚本中预装
ca-certificates包(Linux)或配置CERT_PATH环境变量 - 注意
certifi更新滞后于操作系统CA库,高安全要求场景建议优先同步系统证书
verify参数值和证书文件可读性,而不是急着加verify=False。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











