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

Python2.6+requests2.9.1请求无限等待,curl正常的技术求助

问题分析与解决:Python2.6 + requests2.9.1 HTTPS请求无限等待

问题根源

从报错信息里的SNIMissingWarning和InsecurePlatformWarning可以直接定位核心问题:Python2.6的原生SSL模块不支持SNI(服务器名称指示)。

目标服务器是基于SNI配置的虚拟主机,要求客户端在SSL握手阶段发送SNI信息以匹配对应证书。curl依赖的NSS库支持SNI,浏览器也原生支持,所以能正常完成请求;但Python2.6的ssl模块缺乏该能力,导致服务器无法返回正确证书,握手流程卡住,最终陷入无限等待。

解决方案

方案1:补全SNI支持依赖

给Python2.6安装三个扩展包,替换requests底层的SSL实现,补上SNI支持:

pip install pyopenssl ndg-httpsclient pyasn1

安装完成后重新运行请求代码,即可正常完成SSL握手。

方案2:强制指定TLS版本(临时 workaround)

如果安装依赖存在障碍,可以尝试强制指定服务器支持的TLSv1.2版本,修改请求代码如下:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl

class TLS12Adapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(
            num_pools=connections,
            maxsize=maxsize,
            block=block,
            ssl_version=ssl.PROTOCOL_TLSv1_2
        )

url = "https://b3-reader.ew1-wip.umm.is-pr.com/abcd/healthstatus"
session = requests.Session()
session.mount('https://', TLS12Adapter())
# 务必添加超时参数,避免再次出现无限等待
response = session.get(url, verify=False, timeout=10)
print(response.status_code)

方案3:升级Python版本(长期根治)

Python2.6已停止维护多年,不仅SSL支持落后,还存在大量未修复的安全漏洞。如果业务允许,建议升级到Python3.6及以上版本,从根源解决这类兼容性问题。

额外提醒

无论采用哪种方案,都建议给requests.get()添加timeout参数,避免请求因异常再次陷入无限等待。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:03:26