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

Pandas调用read_csv下载CSV时出现SSL DH_KEY_TOO_SMALL错误如何解决?

出现该错误的原因是目标网站的SSL证书Diffie-Hellman密钥长度低于当前Python环境默认的安全校验要求,浏览器为了兼容性默认放低了校验规则所以可以正常访问。以下是可直接使用的解决方案:

方案1:借助requests下载后读取(兼容性最好,全版本通用)

这个方法直接利用你已经验证可行的requests配置,把下载到的内容直接转成文件对象传给pandas,无需修改pandas底层逻辑:

import pandas as pd
import requests
from io import BytesIO

# 你已经验证过的加密套件配置
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'ALL:@SECLEVEL=1'

url = 'https://info.gesundheitsministerium.gv.at/data/timeline-faelle-bundeslaender.csv'
# 先请求获取内容
res = requests.get(url)
# 把返回的二进制内容转为文件对象传给read_csv
df = pd.read_csv(BytesIO(res.content))

这个方案是最稳妥的,不会影响其他请求的全局ssl配置,也不会因为pandas版本差异出现兼容问题。

方案2:修改全局urllib SSL配置(适合不想改下载逻辑的场景)

pandas 1.3及更早版本默认使用Python标准库的urllib拉取远程文件,因此直接修改urllib的全局ssl配置即可生效:

import pandas as pd
import ssl

# 调整全局SSL安全等级和加密套件
ctx = ssl.create_default_context()
ctx.set_ciphers('ALL:@SECLEVEL=1')
ssl._create_default_https_context = lambda: ctx

url = 'https://info.gesundheitsministerium.gv.at/data/timeline-faelle-bundeslaender.csv'
df = pd.read_csv(url)

注意这个方法会修改当前Python进程所有HTTPS请求的SSL配置,如果你有其他对安全性要求高的请求不建议使用。

方案3:使用pandas的storage_options参数(pandas≥1.2版本适用)

较高版本的pandas支持通过storage_options参数直接传递请求相关的配置给底层I/O模块,无需修改全局配置:

import pandas as pd

url = 'https://info.gesundheitsministerium.gv.at/data/timeline-faelle-bundeslaender.csv'
df = pd.read_csv(
    url,
    storage_options={
        "ciphers": "ALL:@SECLEVEL=1"
    }
)

内容的提问来源于stack exchange,提问作者fccoelho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:15:06