使用Python访问SIBGE(IBGE)API时出现SSL错误- [SSL:UNSAFE_LEGACY_RENEGOTIATION_DISABLED

qvsjd97n  于 2023-10-19  发布在  Python
关注(0)|答案(1)|浏览(208)

我一直在使用Python脚本来访问SIRST(IBGE)API并获取数据。它工作得非常好,但最近,在我没有任何更改的情况下,我开始遇到SSL错误。下面是我一直在使用的代码:

import requests

url = 'https://servicodados.ibge.gov.br/api/v3/agregados'
response = requests.get(url)
print(response.json())

在运行代码时,我得到以下错误:
SSLError:HTTPSConnectionPool(host ='servicodados.ibge.gov.br',port=443):URL超过最大重试次数:/API/v3/agregados(由SSLError(SSLError(1,'[SSL:UNSAFE_LEGACY_RENEGOTIATION_DISABLED]禁用不安全的旧版重新协商(_ssl.c:1007)')
以下是我尝试过的方法:
1.在requests.get()中使用verify=False选项。
1.更新requests和urllib 3库。
1.尝试其他库,如httpx和aiohttp。
1.检查OpenSSL版本。
似乎没有什么能解决这个问题。我很困惑,因为代码过去工作没有任何问题。有没有人遇到过这种情况,知道如何解决?

e4eetjau

e4eetjau1#

试试看:

import ssl

import requests

class TLSAdapter(requests.adapters.HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        ctx = ssl.create_default_context()
        ctx.set_ciphers("DEFAULT@SECLEVEL=1")
        ctx.options |= 0x4   # <-- the key part here, OP_LEGACY_SERVER_CONNECT
        kwargs["ssl_context"] = ctx
        return super(TLSAdapter, self).init_poolmanager(*args, **kwargs)

url = "https://servicodados.ibge.gov.br/api/v3/agregados"

with requests.session() as s:
    s.mount("https://", TLSAdapter())
    print(s.get(url).json())

图纸:

[{'id': 'D5', 'nome': 'Áreas Urbanizadas', 'agregados': [{'id': '8418', 'nome': 'Áreas urbanizadas,

...

相关问题