报错信息:HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: BAD_ECPOINT] bad ecpoint (_ssl.c:1000)')))
SSLError通常是在使用HTTPS协议进行网络请求时遇到的,它表明SSL握手过程中出现了问题。我通过以下的两个步骤解决SSL错误:
-
添加自定义User-Agent:
- 某些服务器可能会根据请求的User-Agent来决定是否允许访问。如果服务器检测到请求来自一个未知或不受信任的User-Agent,它可能会拒绝连接。通过设置一个标准的User-Agent,如
headers = {'User-Agent': 'Mozilla/5.0 (compatible; YourBot/0.1)'}
,可以模仿一个常见的浏览器或爬虫,从而减少被服务器拒绝的可能性。
- 某些服务器可能会根据请求的User-Agent来决定是否允许访问。如果服务器检测到请求来自一个未知或不受信任的User-Agent,它可能会拒绝连接。通过设置一个标准的User-Agent,如
-
将URL从HTTPS更改为HTTP:
- HTTPS是HTTP的安全版本,它使用SSL/TLS协议来加密客户端和服务器之间的通信。如果遇到SSL错误,将URL从HTTPS更改为HTTP意味着你放弃了SSL/TLS加密,直接使用不加密的HTTP协议进行通信。这样做可以避免SSL握手过程中可能出现的问题,但这会降低数据传输的安全性,因为HTTP不提供加密保护。
然而,需要注意的是,仅仅因为更改URL为HTTP可以避免SSL错误,并不意味着这是一个好的解决方案。使用HTTP而不是HTTPS会使得数据传输过程中的敏感信息容易受到中间人攻击。因此,通常建议寻找其他方法来解决SSL错误,例如更新SSL库、使用正确的证书、或者确保服务器配置正确。
如果你正在编写爬虫或自动化脚本,并且遇到SSL错误,你可能需要检查以下几点:
- 确保你的环境(如Python和requests库)是最新的。
- 检查是否有可用的更新或补丁来解决SSL库的问题。
- 确保服务器的SSL证书是有效的,并且没有过期。
- 如果可能,尝试使用不同的User-Agent或添加其他headers来模拟浏览器行为。
- 考虑使用更高级的库,如
urllib3
,它提供了更多的SSL/TLS配置选项。
最后,如果你正在处理敏感数据,强烈建议不要使用HTTP,而是寻找解决SSL错误的方法,以保持通信的安全性。
其他参考资料如下:
https://blog.csdn.net/graceljh/article/details/100163814
https://baijiahao.baidu.com/s?id=1782774393060717153&wfr=spider&for=pc
https://www.jianshu.com/p/3ebe136b6f75
1.安装三个安装包
pip install cryptography
pip install pyOpenSSL
pip install certifi
2.导入urllib3包
import urllib3
urllib3.disable_warnings() #这个添加在 requests.get(‘http://xxx.com/’, headers = header, verify=False)上面
https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
3.关闭证书验证在requests.get加入verify=False
response = requests.get(‘http://xxx.com/’, headers = header, verify=False)
4. 创建不验证服务器证书的HTTPS上下文
import ssl
import requests
# 创建一个不验证服务器证书的HTTPS上下文
context = ssl._create_unverified_context()
# 使用上下文发起HTTPS请求(不安全,不推荐在生产环境中使用)
response = requests.get('https://example.com', verify=False)
print(response.text)
5.添加User-Agent
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
'Connection':'close' #没有影响
}
获取当前浏览器访问某网页所使用的User-Agent:
- 浏览器的JavaScript控制台
- 打开你想要检查User-Agent的网页
- 按F12键或右键选择“检查”(Inspect)来打开开发者工具。
- 切换到“控制台”(Console)标签页。
- 在控制台中输入以下代码并按Enter键执行:
var userAgent = window.navigator.userAgent;
console.log(userAgent);
#执行结果
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36