You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python用argparse控制requests证书校验报SSLError如何修复?

证书校验开关功能错误修复方案

错误原因

argparse默认将所有命令行传入的参数解析为字符串类型,你传入的'False'是字符串而非布尔值False。
requests的verify参数有明确的规则:

  • 传入布尔值:直接控制是否开启SSL证书校验
  • 传入字符串:会被识别为本地CA证书文件的路径,程序会尝试读取对应路径的文件
    你传入字符串'False'时,requests会尝试读取当前目录下名为False的证书文件,自然就抛出找不到文件的错误。

修复方案

方案1:使用开关型参数(推荐,符合命令行工具规范)

直接用argparse的store_false/store_true动作定义开关参数,不需要额外传参数值:

#!/usr/bin/python
import requests
import argparse
parser = argparse.ArgumentParser()
# 默认开启证书校验,指定--no-cert-verify参数时cert_verify自动设为False
parser.add_argument('--no-cert-verify', dest='cert_verify', action='store_false', default=True, help="关闭SSL证书校验")
args = parser.parse_args()

result = requests.get('https://google.com', verify=args.cert_verify)
print(result)

调用方式:

  • 开启校验(默认):./verify.py
  • 关闭校验:./verify.py --no-cert-verify

方案2:自定义类型转换适配传值写法

如果必须保留传True/False作为参数值的用法,需要自定义字符串转布尔的逻辑:

#!/usr/bin/python
import requests
import argparse

def str2bool(v):
    if isinstance(v, bool):
        return v
    if v.lower() in ('yes', 'true', 't', 'y', '1'):
        return True
    elif v.lower() in ('no', 'false', 'f', 'n', '0'):
        return False
    raise argparse.ArgumentTypeError('请传入合法布尔值,支持True/False、yes/no、1/0等格式')

parser = argparse.ArgumentParser()
parser.add_argument('--cert-verify', dest='cert_verify', type=str2bool, help="控制SSL证书校验开启/关闭,传入True/False")
args = parser.parse_args()

result = requests.get('https://google.com', verify=args.cert_verify)
print(result)

调用方式:

  • 开启校验:./verify.py --cert-verify True
  • 关闭校验:./verify.py --cert-verify False

注意事项

不要直接给参数设置type=bool,因为Python中非空字符串转布尔值的结果永远是True,bool('False')返回值为True,完全达不到预期效果。


内容的提问来源于stack exchange,提问作者IHeilig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:15:02