URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify fai

本文介绍使用Python 2.7.9向特定HTTPS站点POST数据时遇到的SSL证书验证失败问题及其解决方案。当目标网站使用自签名证书而非官方授权证书时,可通过禁用SSL证书验证来解决此问题。
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

用python2.7.9 向https://××××××× post 数据时 报错。

原因:
网站用了自己的证书而非官方授权的证书

解决方法:#不用验证 证书
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
Python 中,出现 `urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed` 错误,通常是因为 Python 2.7.9 之后,使用 `urllib.urlopen` 打开一个 `https` 链接时,会验证一次 SSL 证书,而当目标网站使用的是自签名的证书时就会抛出该错误 [^1]。以下是几种常见的解决方案: ### 忽略 SSL 证书验证 在使用 `urllib` 库时,可以通过创建一个忽略 SSL 验证的上下文来解决此问题。示例代码如下: ```python import urllib.request import ssl # 创建一个不验证 SSL 证书的上下文 context = ssl._create_unverified_context() try: # 使用创建的上下文打开 URL response = urllib.request.urlopen('https://example.com', context=context) html = response.read() print(html) except urllib.error.URLError as e: print(f"Error: {e}") ``` ### 设置系统环境变量 可以通过设置 `SSL_CERT_FILE` 环境变量,指向有效的 CA 证书文件,例如: ```bash set SSL_CERT_FILE=C:\Users\Admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\certifi\cacert.pem ``` 在 Python 脚本中,也可以通过 `os.environ` 来设置: ```python import os import urllib.request os.environ['SSL_CERT_FILE'] = 'C:/Users/Admin/AppData/Local/Programs/Python/Python311/Lib/site-packages/certifi/cacert.pem' try: response = urllib.request.urlopen('https://example.com') html = response.read() print(html) except urllib.error.URLError as e: print(f"Error: {e}") ``` ### 更新 CA 证书 确保系统中的 CA 证书是最新的,可以使用 `certifi` 库来获取最新的 CA 证书。首先安装 `certifi`: ```bash pip install certifi ``` 然后在代码中使用: ```python import urllib.request import certifi try: response = urllib.request.urlopen('https://example.com', cafile=certifi.where()) html = response.read() print(html) except urllib.error.URLError as e: print(f"Error: {e}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值