使用requests发送POST请求报certificate verification错误如何解决
证书验证错误解决方案
方案1:跳过证书校验(临时爬取场景适用)
你代码中已经添加了verify=False参数跳过证书校验,绝大多数场景下可以直接解决证书报错问题。如果同时收到不安全请求告警,可添加代码关闭告警即可,另外如果仍然报错可以先升级requests到最新版本:
pip install --upgrade requests
添加告警关闭逻辑后的完整代码如下:
import requests import pandas as pd import json import urllib3 # 关闭跳过证书校验时的不安全请求警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) body = { 'tipoEmpresa': '0'} headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest', 'Content-Type': 'application/json' } def main(url): with requests.Session() as req: req.headers.update(headers) # 注意:x-dtpc为动态生成参数,固定值会失效,建议先GET请求Base页后从页面JS/响应头提取最新值 req.headers['x-dtpc'] = '33$511511524_409h2vHHVRBIAIGILPJNCRGRCECUBIACWCBUEE-0e37' r = req.post(url, data=json.dumps(body), verify = False) resp = r.json()['d'] df = pd.DataFrame(resp) print(df) main('https://www.rad.cvm.gov.br/ENET/frmConsultaExternaCVM.aspx/PopulaComboEmpresas')
补充说明:代码中固定的x-dtpc参数是动态生成的时效参数,固定值使用一段时间后会失效,需要先请求Base页面从返回的页面源码或者响应头中提取最新的参数值再携带发起POST请求。
方案2:保留证书校验(安全场景适用)
如果需要严格校验站点证书避免中间人攻击,可手动导出站点的根证书保存为PEM格式文件,将代码中的verify=False修改为verify="你的证书文件本地路径.pem"即可。
内容的提问来源于stack exchange,提问作者user16704247
相关产品推荐
相关产品推荐

