如何在Python Requests中禁用SNI?

2 投票
1 回答
2978 浏览
提问于 2025-04-18 14:10

我正在尝试使用 requests 库通过 SSL 访问一个远程服务器。可惜的是,这个服务器配置得不太对,在 SNI 握手时返回了一个错误 TLSV1_UNRECOGNIZED_NAME。这个错误在浏览器中会被忽略,但在 requests 中会引发异常。

这个问题看起来和这个问题是一样的,不过是在 Python 中,而不是 Java: SSL 握手警报:自从升级到 Java 1.7.0 后出现的 unrecognized_name 错误

在 Python 2 中,连接是完全正常的,因为它不支持 SNI。那么我该如何在 Python 3 中禁用 SNI,以便连接能够正常工作呢?

1 个回答

7

我找不到在requests层面禁用SNI的方法,但我找到了一种小技巧,可以让它误以为不支持SNI。在导入requests之前添加这段代码(不要在后面添加,否则就来不及了):

import ssl
ssl.HAS_SNI = False

撰写回答