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

Flask中make_response返回gzip内容时无法获取响应数据的问题

报错原因

你调用的.content、.text属性和.json()方法,都是Python requests 客户端库返回的Response对象的接口,不是Flask框架自身Response对象的内置属性/方法,直接调用自然会报不存在、不可调用的错误。

正确获取响应字节的方式

Flask构造的响应对象,响应体的原始字节数据存在response.data属性中,直接读取这个属性就能拿到你之前写入的gzip压缩字节,后续直接做解压即可。

完整验证代码参考:

import gzip
import json
from flask import make_response

# 原有压缩、构造响应的逻辑
large_dict = {"test": "大体积字典测试数据"}
content = gzip.compress(json.dumps(large_dict).encode('utf8'), 9)
response = make_response(content)
response.headers['Content-length'] = len(content)
response.headers['Content-Encoding'] = 'gzip'

# 读取响应中的压缩字节
compressed_data = response.data
print("gzip压缩字节:", compressed_data)

# 解压还原原始字典
raw_data = gzip.decompress(compressed_data)
restored_dict = json.loads(raw_data.decode('utf-8'))
print("解压还原后的数据:", restored_dict)
额外注意事项
  • 不要混用服务端框架和HTTP客户端的响应对象API,二者面向的使用场景不同,接口设计没有通用性
  • Flask原生Response对象的json是属性不是可调用方法,且仅能直接解析未压缩的JSON格式响应体,你当前传入的是gzip压缩后的二进制数据,必须先解压再做JSON反序列化,无法直接通过json属性读取
  • 如果是使用Flask内置测试客户端发起请求拿到的测试响应,同样可以通过.data属性拿到原始响应字节,高版本Flask的测试响应也支持.get_json()方法解析未压缩的JSON响应,但服务端构造的待返回响应直接读.data是最通用的方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:27:49