【Error解决实录】requests.exceptions.SSLError

本文探讨了使用Python进行网页抓取时遇到的SSL错误,并提供了两种解决方案:一是禁用urllib3的警告,二是启用logging捕获警告。主要内容围绕如何通过BeautifulSoup解析WordPress网站上的评论列表。
import requests
from bs4 import BeautifulSoup
url='https://wordpress-edu-3autumn.localprod.forc.work/all-about-the-future_04/'
res=requests.get(url)
html=res.text
soup=BeautifulSoup(html,'html.parser')# 把网页解析为BeautifulSoup对象
items=soup.find_all('div',class_='comment-list')# 通过定位标签和属性提取我们想要的数据
for item in items:
    print(item.text)

直接运行出现requests.exceptions.SSLError

解决方法1:调用了urllib3.disable_warnings()函数,来确保不会发生警告。

import requests
from requests.packages import urllib3 # 新增
urllib3.disable_warnings()# 新增
r = requests.get('https://www.12306.cn', verify=False)# 新增
print(r.status_code)

解决方法2:

import requests
import logging# 新增
logging.captureWarnings(True)# 新增
r = requests.get('https://www.12306.cn', verify=False)# 新增
print(r.status_code)
在使用 Python 的 `requests` 库发起 HTTPS 请求时,如果遇到 `requests.exceptions.SSLError` 错误,通常是由于 SSL/TLS 握手失败导致的。此类问题可能与证书验证、服务器配置或客户端环境有关。以下是一些常见的排查与解决方法: ### 1. 禁用 SSL 验证(不推荐用于生产环境) 在某些测试环境中,可以临时禁用 SSL 证书验证以绕过错误,但这种方式会降低安全性。 ```python import requests response = requests.get('https://example.com', verify=False) ``` 此方法会触发 `InsecureRequestWarning` 警告,可以通过以下方式禁用警告: ```python from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) ``` ### 2. 指定信任的 CA 证书文件 如果服务器使用的是自签名证书或企业内部证书,可以通过 `verify` 参数指定信任的 CA 证书文件(PEM 格式)[^5]。 ```python response = requests.get('https://example.com', verify='/path/to/certfile.pem') ``` ### 3. 更新 CA 证书包 有时系统内置的 CA 证书可能已过期或不完整,可以尝试更新 `certifi` 包或手动更新系统证书。 ```bash pip install --upgrade certifi ``` 然后在代码中使用: ```python import certifi import requests response = requests.get('https://example.com', verify=certifi.where()) ``` ### 4. 检查服务器 SSL 配置 如果错误发生在连接特定服务器时(如监听在 443 端口的服务),可能是服务器端的 SSL 配置存在问题[^2]。可以使用在线工具如 [SSL Labs](https://www.ssllabs.com/ssltest/) 测试服务器 SSL 配置是否正确。 ### 5. 检查网络代理或中间设备 某些防火墙、代理或中间设备可能会拦截或篡改 HTTPS 流量,导致 SSL 握手失败。尝试更换网络环境或关闭代理设置进行测试。 ### 6. 使用自定义 SSL 上下文 如果需要更精细控制 SSL/TLS 版本或证书加载方式,可以使用 `urllib3` 的 `SSLContext` 功能: ```python import ssl import requests from requests.adapters import HTTPAdapter from urllib3.poolmanager import PoolManager class SSLAdapter(HTTPAdapter): def init_poolmanager(self, *args, **kwargs): context = ssl.create_default_context() context.load_verify_locations(cafile="/path/to/certfile.pem") kwargs['ssl_context'] = context return super(SSLAdapter, self).init_poolmanager(*args, **kwargs) session = requests.Session() session.mount('https://', SSLAdapter()) response = session.get('https://example.com') ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值