You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Requests调用Euronext REST API时遭遇OpenSSL.SSL.Error报错

我之前也碰到过类似的SSL握手问题——明明curl能正常跑,换成Requests就掉坑里了。结合你给出的错误信息(urllib3的pyopenssl模块握手失败),大概率是客户端证书配置或者服务器CA信任的细节没处理对,给你几个排查方向和解决方案:

排查与解决方案

1. 确认客户端证书的传递方式

curl对证书的处理比较灵活,但Requests有明确的要求:

  • 如果你的客户端证书和私钥是分开的文件(比如.crt和.key),必须把cert参数设为元组:cert=('你的客户端证书路径.crt', '你的私钥路径.key')
  • 如果是合并成一个PEM文件(证书+私钥都在一个文件里),直接传文件路径即可:cert='合并后的证书.pem'
  • 要是私钥设置了密码,别忘了在元组里加上密码:cert=('client.crt', 'client.key', '你的私钥密码')

2. 确保服务器证书被信任

默认情况下Requests会用系统的根证书库验证服务器证书,但Euronext的API可能用了自定义CA,这时候需要显式指定CA证书文件:

response = requests.get(
    'https://saturn-api-h.euronext.com/你的接口路径',
    cert=('client.crt', 'client.key'),
    verify='euronext的CA证书路径.crt'  # 替换成实际的CA证书文件
)

⚠️ 别轻易用verify=False跳过验证(虽然能快速排查问题,但生产环境绝对禁止,会有安全风险)。

3. 升级相关库版本

旧版本的Requests、urllib3或pyopenssl可能存在SSL握手的兼容性bug,尤其是在处理某些证书格式时。执行下面的命令升级到最新版:

pip install --upgrade requests urllib3 pyopenssl

4. 检查文件路径与权限

  • 尽量用绝对路径指定证书文件,避免相对路径导致程序找不到文件(Windows下注意路径分隔符用\\或者原始字符串r'path')
  • Windows下确保证书文件没有被系统权限限制,比如不要放在受保护的目录(如C:\Windows)里。

5. 开启DEBUG日志排查细节

开启Requests的DEBUG日志,能看到SSL握手的完整过程,帮你定位到底是哪一步出问题:

import logging
import requests

# 开启DEBUG日志
logging.basicConfig(level=logging.DEBUG)

# 发送请求
response = requests.get(
    'https://saturn-api-h.euronext.com/你的接口路径',
    cert=('client.crt', 'client.key'),
    verify='ca.crt'
)

查看日志里的SSL握手细节,比如是否提示“证书不受信任”“私钥不匹配”等具体错误。

对比curl命令验证参数

把你能用的curl命令贴出来对照,比如如果你的curl命令是:

curl --cert client.crt --key client.key --cacert ca.crt https://saturn-api-h.euronext.com/your-endpoint

那对应的Requests参数必须完全匹配——cert对应--cert和--key,verify对应--cacert,确保没有遗漏任何参数。

内容的提问来源于stack exchange,提问作者Jean-François Augé

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:14:21