Python UrlLib3 - 即使禁用 ssl 验证,由于 SSL 错误也无法下载文件

问题描述 投票:0回答:1

我无法使用这段代码下载文件:

import requests

response = requests.get('https://download.inep.gov.br/informacoes_estatisticas/indicadores_educacionais/taxa_transicao/tx_transicao_municipios_2019_2020.zip', stream=True, verify=False)
with open('tx_transicao_municipios_2019_2020.zip', 'wb') as f:
    for chunk in response.iter_content(chunk_size=1024): 
        if chunk: 
            f.write(chunk)

即使设置了 verify=False,我仍然收到此错误:

urllib3.exceptions.SSLError:[SSL:UNEXPECTED_EOF_WHILE_READING] EOF 发生违反协议(_ssl.c:1006)

使用 Chrome 时,我可以下载该文件。

使用 verify=certifi.where() 也不起作用。

环境

  • Windows 10 企业版 22H2 (19045.3448);
  • Python v3.11.5;
  • OpenSSL v3.0.9;
  • Urllib3 v2.0.6;
  • 请求v2.31.0;
  • 证书 v2023.7.22;

还在 MacOS Catalina (10.15) 和 MacOS Big Sur (11.x) 中尝试过,但没有成功。

我在这里做错了什么?

python python-requests openssl urllib3 certifi
1个回答
0
投票

尝试:

import ssl
import warnings

import requests
import requests.packages.urllib3.exceptions as urllib3_exceptions

warnings.simplefilter("ignore", urllib3_exceptions.InsecureRequestWarning)


class TLSAdapter(requests.adapters.HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        ctx = ssl.create_default_context()
        ctx.check_hostname = False
        ctx.set_ciphers("DEFAULT@SECLEVEL=1")
        ctx.options |= 0x4
        kwargs["ssl_context"] = ctx
        return super(TLSAdapter, self).init_poolmanager(*args, **kwargs)


url = "https://download.inep.gov.br/informacoes_estatisticas/indicadores_educacionais/taxa_transicao/tx_transicao_municipios_2019_2020.zip"

with requests.session() as s:
    s.mount("https://", TLSAdapter())

    response = s.get(url, verify=False, stream=True)

    with open("tx_transicao_municipios_2019_2020.zip", "wb") as f:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)

下载

tx_transicao_municipios_2019_2020.zip

-rw-r--r-- 1 root root 17298416 okt 16 20:04 tx_transicao_municipios_2019_2020.zip
© www.soinside.com 2019 - 2024. All rights reserved.