Python requests双端点调用:带证书请求后无证书请求报SSLError的解决方法
问题:requests调用不同API端点时客户端证书复用引发SSL错误
我正在使用Python的requests包进行API调用,需要对接两个不同的API端点:
- 第一个是
https://api.example.com,要求使用客户端证书; - 第二个是
https://work.myserver.com,无需客户端证书。
但调用第一个带证书的端点后,后续调用第二个端点时会报错:
SSLError(SSLError(1, '[SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca'))
我猜测使用客户端证书发起请求后,后续所有请求无论哪个端点都会复用该证书。请问如何让requests仅在指定端点使用客户端证书,其他端点不使用?
我的代码如下:
import requests # 设置密钥对路径 cert_path = "/etc/application/client.crt" key_path = "/etc/application/client.key" keypair_paths = (cert_path, key_path) response1 = requests.get( "https://api.example.com", cert=keypair_paths, ) response2 = requests.get("https://work.myserver.com") # 该端点不需要客户端证书
我使用的requests版本是2.32.3。
更新:按照Andrej Kesely的建议,我尝试将请求放在requests.Session的with上下文管理器中,但问题未解决。目前我通过urllib库处理无需客户端证书的请求作为临时解决方案,但原问题仍未解决。
内容的提问来源于stack exchange,提问作者rlandster
相关产品推荐
相关产品推荐

