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

Python Requests结合wincertstore访问企业内网SSL报错求助

解决Requests访问内部网页的SSL证书验证问题

看起来你遇到的问题是Python的requests库默认不使用Windows系统的信任证书池,导致访问企业内部网站(使用自定义CA签发的证书)时出现SSL验证失败。我来帮你修正代码,同时提供更简便的解决方案。

问题分析

你之前的代码已经用wincertstore导出了Windows的CA和根证书,但没有让requests使用这个证书文件——你创建了ssl_sock但没关联到requests的请求流程里,所以requests还是用默认的证书池,自然验证失败。

另外注意你的wget命令用了--no-check-certificate,这是跳过证书验证,虽然能访问但存在安全风险,不建议在Python里用verify=False来模仿这个行为。

解决方案1:手动用wincertstore配合requests

修改你的代码,把导出的证书文件路径传给requests.get()的verify参数,这样requests就会用Windows的信任证书来验证:

import requests
from requests.auth import HTTPBasicAuth
import wincertstore
import atexit

# 创建临时证书文件,加载Windows系统的CA和根证书
certfile = wincertstore.CertFile()
certfile.addstore("CA")
certfile.addstore("ROOT")
# 程序退出时自动关闭证书文件
atexit.register(certfile.close)

# 发起请求时指定使用我们导出的证书
url = "你的内部网页URL"
response = requests.get(
    url,
    auth=HTTPBasicAuth('my username', 'my password'),
    verify=certfile.name  # 关键:指定证书文件路径
)

# 提取你需要的部分内容,比如前1000个字符
print("目标内容片段:", response.text[:1000])

解决方案2:用certifi_win32自动加载系统证书

如果你觉得手动处理证书太麻烦,推荐使用certifi_win32包,它会自动让requests使用Windows系统的信任证书,无需额外代码配置:

  1. 先安装包:
pip install certifi_win32
  1. 然后直接正常使用requests即可:
import requests
from requests.auth import HTTPBasicAuth

url = "你的内部网页URL"
response = requests.get(
    url,
    auth=HTTPBasicAuth('my username', 'my password')
)

# 获取你需要的内容片段
print("目标内容片段:", response.text[:1000])

这个原理是certifi_win32替换了certifi(requests默认依赖的证书库)的证书存储路径,让requests自动读取Windows的系统证书。

为什么你的wget能成功?

你的wget命令加了--no-check-certificate,本质是关闭了SSL证书验证,所以能绕过错误,但这种做法会让你面临中间人攻击的风险,所以不推荐在生产代码中使用requests的verify=False参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:40:21