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

使用requests向Firestore提交JSON数据时遇400错误求助

问题排查与解决

你遇到的400错误核心原因很明确:错误地将文档数据作为URL查询参数传递,而Firestore REST API要求把数据放在请求体中。

错误原因分析

当你调用s.post(..., params=json.dumps(self.data), ...)时,requests会把这个JSON字符串当作URL的查询参数拼接在请求地址后,最终的请求URL会变成类似这样:

https://firestore.googleapis.com/v1/projects/.../documents/messages/TemitayoAdefemi?{"data": "message"}

Firestore的API完全无法识别这种格式的参数,它期望的是在请求体中接收标准的JSON文档数据,所以才会返回"找不到字段"的错误。

修正后的代码

把params参数替换为json参数(requests会自动帮你处理JSON编码和设置正确的Content-Type: application/json请求头):

def thestream(self, instance):
    app = App.get_running_app()
    s = requests.Session()
    self.data = {u'data': u'message'}
    self.headers = {"authorization": "bearer " + app.idToken}
    # 关键修改:用json参数传递请求体数据,而不是params
    r = s.post(
        "https://firestore.googleapis.com/v1/projects/*******************************/databases/(default)/documents/messages/TemitayoAdefemi",
        json=self.data,
        headers=self.headers
    )
    print(r.ok)
    print(r.content.decode())

额外注意事项

  • 如果你习惯手动编码JSON,也可以用data=json.dumps(self.data),但记得在headers里加上"Content-Type": "application/json",不过用json参数更简洁不易出错。
  • 确认你的idToken是有效的,且拥有对该Firestore文档的写入权限。
  • 检查请求路径是否正确:messages是集合名,TemitayoAdefemi是你要写入的文档ID,这个路径格式是符合Firestore REST API规范的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:33:13