@[TOC](【Python】 报错:{SSLError}HTTPSConnectionPool(host=‘www.xxx.cn’, port=443): Max retries exceeded with url: /ss/xx/ (Caused by SSLError(SSLError(1, ‘[SSL: BAD_ECPOINT] bad ecpoint (_ssl.c:1000)’))))
python 报错内容:
{SSLError}HTTPSConnectionPool(host=‘www.xxx.cn’, port=443): Max retries exceeded with url: /ss/xx/ (Caused by SSLError(SSLError(1, ‘[SSL: BAD_ECPOINT] bad ecpoint (_ssl.c:1000)’)))
python 代码:
requests.get(url, headers=headers)
python requests或者urllib3却获取不到网站内容信息
但通过Postman或者浏览器可以打开www.xxxx.cn访问网站,
解决方案一:忽略 SSL 证书验证
requests.get(url, headers=headers, verify=False)
报错:
解决方案二:使用其他 HTTP 客户端库
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', url, headers=headers)
content = response.data
还是报错,又查了些资料,应该是"TLS指纹",尝试使用curl-cffi 库,它提供了对libcurl的绑定,允许你使用Python来执行HTTP客户端操作,类似于在命令行中使用curl工具。curl-cffi利用了CFFI(C Foreign Function Interface for Python)来提供这些功能。
先通过pip来安装curl-cffi:
pip install curl-cffi
导入库
url = 'https://www.xxx.ss.cn/xx/ee/'
from curl_cffi import requests as curl_requests
# 设置一个用户代理,模仿浏览器的行为。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = curl_requests.get(url, headers=headers, impersonate="chrome110")
print(response.status_code)