Flask无法接收表单请求:Content-Type相关错误求助
问题排查与解决方案
问题根源
你遇到的问题是因为新版本Flask-RESTful的reqparse默认参数解析位置从表单(form)改成了JSON(json),导致后端期望接收JSON格式数据,但你发送的是表单编码数据,两者不匹配;而强行设置JSON头后,你发送的还是表单格式数据,自然无法被解析。
解决方法
方法一:修改后端参数解析配置(推荐)
确保你的ParseArgs在定义参数时指定从表单获取数据,给每个add_argument加上location='form'参数:
from flask_restful import reqparse # 重新定义ParseArgs ParseArgs = reqparse.RequestParser() # 明确指定从表单中读取参数 ParseArgs.add_argument('FileName', location='form') ParseArgs.add_argument('Mode', location='form') # 原GetFiles类保持不变 api.add_resource(GetFiles, '/Files') class GetFiles(Resource): def post(self): args = ParseArgs.parse_args() if '.txt' not in args['FileName']: FileName = f'{args["FileName"]}.txt' else: FileName = args['FileName'] # 后续处理逻辑...
方法二:修改前端请求为JSON格式
如果不想调整后端,可以把请求数据转为JSON格式发送,同时设置正确的请求头:
import json import requests r = requests.post( 'http://x.x.x.x/Files', data=json.dumps({'FileName': filename, 'Mode': 'Add'}), headers={'Content-Type': 'application/json'} )
额外验证步骤
- 检查Docker容器中安装的Flask-RESTful版本,对比之前的环境版本,确认是否是版本更新导致的默认行为变更。
- 测试时可以用Postman发送表单请求,验证后端修改后的解析是否正常。
内容的提问来源于stack exchange,提问作者lt7
相关产品推荐
相关产品推荐

