运行在Docker容器中的Flask应用无法正常获取JSON请求参数
问题根因及修复方案
服务端参数获取逻辑错误
你当前使用request.args.get('host')读取参数,request.args仅用于获取URL拼接的查询参数(例如/api/whois/?host=8.8.8.8形式的参数),你的参数存储在JSON请求体中,需要先解析JSON请求体再取值。
正确取值代码示例:
# 解析JSON请求体为Python字典 req_json = request.get_json() # 从字典中读取host参数 host = req_json.get('host') logger.debug(host)
你调试输出中出现的(Ellipsis, Ellipsis),就是因为request.args中不存在对应的host参数,框架返回了默认的省略号占位对象。
客户端请求写法优化
你当前使用data=payload传递JSON参数,仅当payload为JSON字符串时符合预期,如果直接传入字典,requests会默认将其转换为表单格式参数。更稳妥的写法是直接使用requests的json参数传值,无需手动设置Content-Type头,requests会自动完成JSON序列化和请求头配置:
import requests url = "http://127.0.0.1:80/api/whois/" payload={"host": "8.8.8.8"} response = requests.post(url, json=payload)
修复后完整接口示例
class WhoisInfo(Resource): def post(self): logger.debug("got request method POST") # 先校验请求格式是否为JSON if not request.is_json: return {"error": "请求格式必须为JSON"}, 400 # 解析JSON请求体 req_json = request.get_json() host = req_json.get('host') # 校验必填参数 if not host: return {"error": "缺少必填参数host"}, 400 logger.debug(f"获取到的host参数为: {host}") # 此处补充你的whois查询逻辑 return {"error": "Not information about this zone "}, 400 api_v1.add_resource(WhoisInfo, "/api/whois/")
内容的提问来源于stack exchange,提问作者user9682431
相关产品推荐
相关产品推荐

