win7 python3 解决 (SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_s

本文介绍了解决Python3在采集HTTPS网站时遇到的SSLError证书验证失败问题的方法。提供了两种解决方案:一是创建未验证的SSL上下文并在urlopen中传入;二是全局取消证书验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 python3 采集 HTTPS的网站,报错提示:

win7 python3 (SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c :749)'),)

解决办法,加入:

  1. 使用ssl创建未经验证的上下文,在urlopen中传入上下文参数
import ssl
import urllib2

context = ssl._create_unverified_context()
print urllib2.urlopen("https://www.12306.cn/mormhweb/", context=context).read()
  1. 全局取消证书验证
import ssl
import urllib2

ssl._create_default_https_context = ssl._create_unverified_context
print urllib2.urlopen("https://www.12306.cn/mormhweb/").read()

推荐方法:

在此使用方法2,修改weibo.py,在第155行添加下列代码:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

来源:http://blog.youkuaiyun.com/moonhillcity/article/details/52767999

### urllib3 SSLError CERTIFICATE_VERIFY_FAILED解决方案 当遇到 `urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]` 错误时,这通常是因为 Python 在尝试通过 HTTPS 请求数据时无法验证目标服务器的 SSL 证书。以下是几种常见的解决方法: #### 方法一:更新 CA 证书 Python 使用内置的 CA 证书来验证远程服务器的身份。如果这些证书过期或缺失,则可能导致此问题。可以通过安装最新的 CA 证书包解决问题。 ```bash pip install certifi --upgrade ``` 完成升级后,可以手动指定 `certifi` 提供的 CA 文件路径作为请求中的参数[^3]: ```python import requests import certifi response = requests.get('https://example.com', verify=certifi.where()) print(response.text) ``` --- #### 方法二:禁用 SSL 验证 虽然不推荐在生产环境中使用这种方法,但在开发阶段或者测试场景下,可以选择关闭 SSL 验证以绕过该错误。需要注意的是,这样做会降低安全性并使通信容易受到中间人攻击。 对于 `urllib3` 来说,可以直接设置 `verify=False` 参数: ```python import urllib3 http = urllib3.PoolManager() response = http.request('GET', 'https://example.com', timeout=10, retries=3, headers={}, fields=None, **{'cert_reqs': 'CERT_NONE'}) print(response.data.decode('utf-8')) ``` 同样地,在 `requests` 库中也可以实现类似功能[^5]: ```python import requests response = requests.get('https://example.com', verify=False) print(response.text) ``` 注意:为了抑制警告消息,还可以导入 `urllib3.disable_warnings()` 并调用它: ```python from urllib3 import disable_warnings, exceptions disable_warnings(exceptions.InsecureRequestWarning) ``` --- #### 方法三:创建未验证的 SSL 上下文 (仅限特定情况) 另一种方式是利用标准库模块 `ssl` 创建一个忽略证书校验的上下文对象,并将其传递给网络请求函数[^4]: ```python import ssl import urllib.request context = ssl._create_unverified_context() req = urllib.request.Request('https://example.com') with urllib.request.urlopen(req, context=context) as response: html = response.read().decode('utf-8') print(html) ``` 这种方式适用于某些低级别的 HTTP 客户端操作,但对于更复杂的项目建议优先考虑其他替代方案。 --- #### 方法四:修改源码(谨慎) 如果是在特殊环境下工作(比如 Ascend),可能需要调整第三方依赖项内部逻辑才能彻底消除异常行为。例如编辑 `sessions.py` 文件并将默认值改为 `False` 可能是一个临时措施[^5]。不过这种做法存在风险,因为一旦重新安装软件包就会覆盖更改内容。 因此除非万不得已否则不要轻易改动官方发行版本代码! --- ### 总结 综上所述,针对不同需求可采取多种策略应对 `[SSL: CERTIFICATE_VERIFY_FAILED]` 报错现象。从长远来看维护最新版环境以及正确配置信任链是最理想的选择;而在短期应急处理过程中则允许适当放宽约束条件以便继续执行流程[^2].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值