url="https://price.mofcom.gov.cn/datamofcom/front/ExchFinancialDyna/searchlist/query"
result=None
async with aiohttp.ClientSession(connector=TCPConnector(ssl=False)) as session:
data={"currency_namc":"日元","pageNumber":"2","pageSize":"15"}
async with session.post(url,data=data,headers=headers) as response:
result= await response.json()
#result= await fetch_url(session,"2")
print(result)
ClientConnectorSSLError Traceback (most recent call last)
Cell In[1], line 51
49 async with aiohttp.ClientSession(connector=TCPConnector(ssl=False)) as session:
50 data={"currency_namc":"日元","pageNumber":"2","pageSize":"15"}
---> 51 async with session.post(url,data=data,headers=headers) as response:
52 result= await response.json()
53 #result= await fetch_url(session,"2")
ClientConnectorSSLError: Cannot connect to host price.mofcom.gov.cn:443 ssl:default [[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1006)]
python爬虫ClientConnectorSSLError如何解决?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
檀越@新空间 2025-08-10 23:16关注晚上好🌙🌙🌙
本答案参考通义千问出现
ClientConnectorSSLError错误,通常是由于 SSL/TLS 握手失败 导致的。这可能是因为目标网站(如price.mofcom.gov.cn)使用了不兼容的 SSL 协议版本、证书问题或服务器配置限制。以下是你遇到的问题的详细分析和解决方案:
✅ 问题原因分析
- SSL 握手失败:错误信息中的
SSLV3_ALERT_HANDSHAKE_FAILURE表明客户端与服务器之间的 SSL/TLS 握手失败。 - 服务器端 SSL 配置限制:该网站可能只支持某些特定的 SSL/TLS 版本或加密套件,而你的 Python 环境默认使用的配置不匹配。
- aiohttp 默认 SSL 配置:默认情况下,
aiohttp使用的是系统提供的 SSL 库,可能会与服务器要求的 SSL 版本不兼容。
🔧 解决方案
1. 升级 aiohttp 和相关依赖库
确保你使用的是最新版本的
aiohttp和cryptography,因为旧版本可能存在 SSL 兼容性问题。pip install --upgrade aiohttp cryptography
2. 自定义 SSL 上下文,指定更兼容的 SSL 协议
你可以创建一个自定义的 SSL 上下文,并禁用不兼容的协议(例如 SSLv3),同时启用 TLSv1.2 或更高版本。
✅ 修改后的代码如下:
import aiohttp import asyncio from ssl import create_default_context, PROTOCOL_TLS_CLIENT # 自定义 SSL 上下文 ssl_ctx = create_default_context() ssl_ctx.options |= (ssl.OP_NO_SSLv3 | ssl.OP_NO_SSLv2 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1) ssl_ctx.set_ciphers('HIGH:!aNULL:!MD5') # 设置加密套件 async def fetch_data(): url = "https://price.mofcom.gov.cn/datamofcom/front/ExchFinancialDyna/searchlist/query" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } data = {"currency_namc": "日元", "pageNumber": "2", "pageSize": "15"} async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=ssl_ctx)) as session: try: async with session.post(url, data=data, headers=headers) as response: result = await response.json() print(result) except Exception as e: print(f"Error: {e}") # 运行异步任务 asyncio.run(fetch_data())
3. 禁用 SSL 验证(仅用于测试)
如果你只是在测试阶段,可以暂时禁用 SSL 验证,但这不推荐用于生产环境。
⚠️ 注意:禁用 SSL 验证会带来安全风险,仅限测试使用。
import aiohttp import asyncio async def fetch_data(): url = "https://price.mofcom.gov.cn/datamofcom/front/ExchFinancialDyna/searchlist/query" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } data = {"currency_namc": "日元", "pageNumber": "2", "pageSize": "15"} async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session: try: async with session.post(url, data=data, headers=headers) as response: result = await response.json() print(result) except Exception as e: print(f"Error: {e}") asyncio.run(fetch_data())
4. 检查目标网站是否支持 HTTPS
有些网站虽然使用 HTTPS,但可能对客户端有额外的限制(如浏览器指纹、Referer 头等)。你可以尝试在浏览器中访问该 URL,观察是否能正常加载页面,如果不能,可能是网站本身的问题。
🛠️ 重点总结
- SSL 握手失败 是导致
ClientConnectorSSLError的主要原因。 - 自定义 SSL 上下文 可以解决 SSL 协议不兼容问题。
- 禁用 SSL 验证 只适用于测试环境。
- 升级 aiohttp 和 cryptography 可以提升兼容性。
🧪 测试建议
- 如果你无法连接到该网站,可以尝试更换其他 HTTPS 网站进行测试,确认是否是目标网站的问题。
- 使用工具如
curl或Postman测试该 URL,查看是否能成功获取响应。
如有更多问题,欢迎继续提问!
解决 无用评论 打赏 举报- SSL 握手失败:错误信息中的