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

使用Flask-GitHub OAuth时触发requests.exceptions.SSLError求助

解决Flask-GitHub授权时的TLSv1协议版本SSL错误

嘿,这个问题我之前碰到过,本质是GitHub早就停止支持TLSv1和TLSv1.1这类旧加密协议了,你的请求用了被废弃的协议版本,所以被GitHub服务器直接拒绝了。通常这个问题出在两个核心点:旧版本的requests库,或者你的Python版本太老。下面给你几个解决方案,按顺序试就行:

1. 先升级requests库

Flask-GitHub底层靠requests发HTTPS请求,旧版requests默认会用较老的TLS协议。直接升级到最新兼容版:

# 通用升级命令
pip install --upgrade requests

# 如果还在坚持用Python 2.7,要指定兼容的最高版本(2.7已经停更了,建议尽快换3.x)
pip install requests==2.27.1

2. 检查并升级Python版本

如果升级requests后还是报错,那大概率是Python版本的锅:

  • Python 2.7.9之前的版本,自带的SSL库不支持TLSv1.2及以上
  • Python 3.4及以下也存在类似的协议支持问题

长远来看,强烈建议你升级到Python 3.7+(Python 2.7已经停止维护好几年了,安全漏洞没人修),这是一劳永逸的办法。

3. 临时强制使用TLSv1.2(迫不得已的备选方案)

如果暂时没法升级Python或依赖库,可以试试在代码里强制requests用TLSv1.2。修改你的Flask应用代码,在初始化GitHub对象前加这段:

import requests
from requests.adapters import HTTPAdapter
from urllib3.poolmanager import PoolManager
import ssl
from flask import Flask
from flask_github import GitHub

app = Flask(__name__)

# 自定义适配器,强制使用TLSv1.2+
class TLSAdapter(HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        ctx = ssl.create_default_context()
        ctx.set_ciphers('DEFAULT@SECLEVEL=1')
        # 禁用TLSv1和TLSv1.1
        ctx.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1
        kwargs['ssl_context'] = ctx
        return super(TLSAdapter, self).init_poolmanager(*args, **kwargs)

# 创建会话并挂载适配器
session = requests.Session()
session.mount('https://', TLSAdapter())

# 让Flask-GitHub使用这个自定义会话
github = GitHub(app)
github.session = session

# 剩下的路由和配置正常写

不过这只是临时救急的办法,还是尽快升级Python和依赖库更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:54:28