Flask服务端间POST请求接收JSON为None故障排查求助
问题根源
你在webhook服务端向数据库服务端转发POST请求时,没有指定Content-Type: application/json请求头,Flask框架无法识别请求体是JSON格式,因此request.json直接返回none。
修复方案
方案1:手动添加JSON请求头
修改webhook服务端的请求发送代码,补充请求头参数即可:
@app.route("/", methods=['POST']) def itgluealertwebhook(): if request.method == 'POST': json_payload = json.dumps(request.json, indent=1) # 补充Content-Type请求头 requestlink = requests.post( url = "http://127.0.0.1:5060/itgpsqdbadd", data = json_payload, headers={'Content-Type': 'application/json'} ) print(json_payload) print(requestlink) return json_payload
方案2:使用requests库内置JSON参数(更简洁)
requests库的post方法支持直接传入json参数,会自动完成JSON序列化、添加对应请求头的操作,无需手动处理:
@app.route("/", methods=['POST']) def itgluealertwebhook(): if request.method == 'POST': # 无需手动dumps序列化 json_payload = request.json requestlink = requests.post( url = "http://127.0.0.1:5060/itgpsqdbadd", json = json_payload ) print(json.dumps(json_payload, indent=1)) print(requestlink) return json.dumps(json_payload, indent=1)
额外优化建议
数据库服务端代码中直接通过requestj['Password Url']的方式取值,若请求JSON中缺少对应键会直接抛出异常,建议改为requestj.get('Password Url', '')的方式取值,提前处理缺值的异常场景。
内容的提问来源于stack exchange,提问作者user16660683
相关产品推荐
相关产品推荐

