如何正确向Flask Web服务POST发送JSON?请求先200后400异常
问题分析与解决方案
你的核心问题在于Flask视图函数未返回合法的HTTP响应,这导致客户端(SFDC-Callout)无法收到预期结果,进而触发重试机制,最终出现400错误。
具体原因
你提供的视图函数中仅有print语句,没有任何return语句。Flask在这种场景下会默认返回空的200响应,但SFDC-Callout可能期望收到格式合规的JSON响应,因此会判定第一次请求失败并发起重试。第二次请求时,可能因SFDC的重试校验(如重复请求拦截)或请求上下文变化,导致返回400错误。
需要注意的是,控制台能打印出正确解析的JSON数据,仅说明请求解析环节无问题,不代表整个请求处理流程完整。
修复步骤
修改视图函数,确保返回合法的JSON响应:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/parsed-invoice', methods=['GET', 'POST']) def parse_invoice(): if request.method == 'POST': files_ids_jsonified = request.get_json() print(f"FILE IDS JSON {files_ids_jsonified} TYPE {type(files_ids_jsonified)}") # 返回符合要求的JSON响应与200状态码 return jsonify( {'message': '文件ID已成功接收', 'filesIds': files_ids_jsonified['filesIds']} ), 200 # 处理GET请求(若无需支持可返回405方法不允许) return jsonify({'error': '不支持该请求方法'}), 405
额外检查点
- 确认SFDC-Callout发送请求时,
Content-Type头设置为application/json(虽然force=True能绕过格式校验,但规范的请求头可避免潜在问题)。 - 开启Flask调试模式(
app.debug = True)或调整日志级别,查看400错误的具体详情,进一步定位第二次请求失败的原因。
内容的提问来源于stack exchange,提问作者Oleksii Drozd
相关产品推荐
相关产品推荐

