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

Flask请求中HTTP调用失败,命令行执行正常的原因排查

Flask/Django开发服务器中HTTPS请求失败,但命令行执行正常的问题

问题概述

在开发Flask或Django应用时,出现异常现象:在请求处理上下文内发起对外HTTPS调用会失败,但直接在Python命令行中执行相同的请求逻辑却能成功。

复现代码

简化后的Flask应用代码(保存为sslerror.py):

import requests
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    try:
        response = requests.get("https://httpbin.org/get")
        data = response.json()
    except Exception as e:
        print(f"Caught exception {e}")
        data = "no data: error"
    return(f'<pre>{data}</pre>')

需提前安装依赖:flask、requests

场景对比

Flask开发服务器场景

使用命令启动应用:

flask --app sslerror run

应用监听http://127.0.0.1:5000,浏览器访问时触发错误,控制台输出:

Caught exception HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /get (Caused by SSLError(SSLError(0, 'unknown error (_ssl.c:3098)')))

Python命令行场景

在命令行执行以下代码,可成功获取结果:

>>> from sslerror import hello_world
>>> hello_world()
"<pre>{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.31.0', 'X-Amzn-Trace-Id': 'Root=1-652f409a-abcdefabcdef'}, 'origin': '108.x.x.x', 'url': 'https://httpbin.org/get'}</pre>"

Gunicorn启动场景

安装gunicorn后使用命令启动:

gunicorn -w 1 sslerror:app

应用监听http://127.0.0.1:8000,浏览器访问可正常返回结果。

环境信息

  • 操作系统:MacOS 13.6(Ventura),Apple M2芯片
  • Python环境:pyenv管理的Python 3.11.5

已尝试方案

在requests.get()中添加verify=False和allow_redirects=False参数,问题未解决,报错现象一致。

后续测试更新

  • 在pyenv管理的Python 3.8、Homebrew安装的Python 3.11虚拟环境中测试,现象完全一致;
  • 将requests替换为httpx库发起请求,问题依旧;
  • 在Django runserver进程中发起HTTPS调用,出现相同错误;
  • 将请求URL改为HTTP协议时,Flask应用中可正常执行,但目标服务仅支持HTTPS。

问题咨询

为何对外HTTPS请求在Flask/Django请求上下文执行失败,命令行执行却正常?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:21:26