如何在Python的requests或urllib包中全局禁用SSL验证?
全局禁用requests SSL验证的方法
方法1:修改requests全局默认配置
如果第三方包没有显式指定verify=True,可直接修改requests的默认参数,将verify设为False:
import requests # 禁用不安全请求的警告(可选,避免控制台输出大量冗余信息) requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning) # 设置全局默认verify为False requests.defaults['verify'] = False
注意:若第三方包调用requests时显式传入了verify=True,该方法会被覆盖,无法生效。
方法2:猴子补丁强制覆盖verify参数
如果第三方包显式指定了verify=True,可通过猴子补丁修改requests核心请求方法,强制将verify设为False,覆盖所有调用:
import requests from requests.api import request as original_request from requests.sessions import Session as OriginalSession # 禁用不安全请求警告 requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning) # 补丁requests.api.request方法(直接调用requests.get/post等时生效) def patched_api_request(method, url, **kwargs): kwargs['verify'] = False return original_request(method, url, **kwargs) requests.api.request = patched_api_request # 补丁requests.Session.request方法(使用Session对象时生效) class PatchedSession(OriginalSession): def request(self, method, url, **kwargs): kwargs['verify'] = False return super().request(method, url, **kwargs) requests.Session = PatchedSession
该方法无论第三方包是否显式指定verify参数,都会强制禁用SSL验证,适用性最广。
方法3:通过环境变量配置
可通过环境变量控制requests底层依赖urllib3的行为,同时抑制警告:
终端临时设置(运行脚本前执行)
# 允许urllib3使用不安全的HTTPS连接 export URLLIB3_INSECURE_TRANSPORT=1 # 抑制Python的不安全请求警告 export PYTHONWARNINGS="ignore:Unverified HTTPS request"
代码内设置环境变量
若无法在终端设置,可在代码开头配置:
import os # 先设置环境变量,再导入requests确保生效 os.environ['URLLIB3_INSECURE_TRANSPORT'] = '1' os.environ['PYTHONWARNINGS'] = 'ignore:Unverified HTTPS request' import requests
注意:这种方法本质是允许urllib3跳过证书验证,requests会继承该行为,但如果第三方包显式设置verify=True,仍可能触发验证错误,此时需改用猴子补丁方法。
内容的提问来源于stack exchange,提问作者Cord Kaldemeyer
相关产品推荐
相关产品推荐

