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

使用Python调用SIDRA(IBGE) API时遇SSLError问题求助

解决SSL UNSAFE_LEGACY_RENEGOTIATION_DISABLED错误

这个错误的核心原因是目标服务器使用了不安全的SSL重新协商机制,而你的本地OpenSSL版本默认禁用了该机制,导致SSL握手失败。以下是经过验证的解决方法:

方法1:自定义SSL适配器(适配requests库)

创建一个允许旧协商逻辑的SSL适配器,替换requests默认的适配器:

import requests
import ssl
from urllib3.poolmanager import PoolManager

class LegacySSLAdapter(requests.adapters.HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        # 创建SSL上下文并启用旧服务器连接选项
        ctx = ssl.create_default_context()
        ctx.options |= 0x4  # OP_LEGACY_SERVER_CONNECT,允许旧协商逻辑
        self.poolmanager = PoolManager(
            num_pools=connections,
            maxsize=maxsize,
            block=block,
            ssl_context=ctx
        )

url = 'https://servicodados.ibge.gov.br/api/v3/agregados'
# 创建会话并挂载自定义适配器
session = requests.Session()
session.mount('https://', LegacySSLAdapter())

response = session.get(url)
print(response.json())

方法2:临时通过环境变量绕过限制

在运行脚本前设置环境变量,临时让OpenSSL允许不安全的旧协商:

Linux/macOS终端:

export OPENSSL_CONF=/dev/null

然后执行你的Python脚本。

Windows命令提示符:

set OPENSSL_CONF=NUL

再执行脚本。

方法3:修改OpenSSL全局配置(不推荐,影响所有应用)

找到本地OpenSSL的配置文件(通常名为openssl.cnf或openssl.conf),添加或修改以下配置段:

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=1
Options = UnsafeLegacyRenegotiation

保存后重启Python环境即可生效。


内容的提问来源于stack exchange,提问作者João Lucio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:53:09