在对 Firebase 的 Python POST 请求中,位置 0 处出现意外的令牌 END OF FILE

CPU*_*Fry 0 python json firebase firebase-cloud-messaging

我正在尝试通过 Firebase 向某个客户端发送消息。这是我当前的(测试)代码:

import json
import requests
import urllib

def send_message():
    server = "https://fcm.googleapis.com/fcm/send"
    api_key = "xxx"
    user_token = "xxx"

    headers = {'Content-Type': 'application/json', 'Authorization': 'key=' + api_key}

    data = {"type": "dataUpdate"}
    payload = {"data": data, "to": user_token}
    payload = json.dumps(payload)

    res = requests.post(server, headers=headers, json=payload)

    return res
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误,由 Firebase 返回:

JSON_PARSING_ERROR: Unexpected token END OF FILE at position 0.
Run Code Online (Sandbox Code Playgroud)

发送到 Firebase 的以下 JSON 对我来说似乎是正确的:

{  
   "data": {  
      "type":"dataUpdate"
   },
   "to":"xxx"
}
Run Code Online (Sandbox Code Playgroud)

这是Firebase 文档中描述的格式。知道为什么 Firebase 不接受给定的数据吗?

Ope*_*X03 5

当您json=payload用作参数时,requests.post()您不需要'Content-Type': 'application/json'在标题中指定。此外,当参数应payload为 dict时,您正在传递一个字符串(即,不需要json.dumps()

尝试这个:

def send_message():
    server = "https://fcm.googleapis.com/fcm/send"
    api_key = "xxx"
    user_token = "xxx"

    headers = {'Authorization': 'key=' + api_key}

    data = {"type": "dataUpdate"}
    payload = {"data": data, "to": user_token}

    res = requests.post(server, headers=headers, json=payload)

    return res
Run Code Online (Sandbox Code Playgroud)