带有请求 return 'Could not parse JSON' 错误的云函数

Cloud Functions with Requests return 'Could not parse JSON' error

我是 运行 python 中的一个云函数,用于 return 来自 api 的一些数据。该功能未执行,出现错误 {'code': 400, 'message': 'Could not parse JSON'}.

这是我的代码:

import requests
import json

def my_function(request):

    url = 'https://blablabla/detailed'
    headers = {'X-Api-Key': 'XXXXXXXX',
           'content-type': 'application/json'}

    data = '{"dateRangeStart":"2020-05-10T00:00:00.000","dateRangeEnd":"2020-05-16T23:59:59.000","amountShown": "HIDE_AMOUNT","detailedFilter":{ "page":"1","pageSize":"50"}}'
    
    #req = requests.post(url, headers=headers, json=data)
    req = requests.post(url, headers=headers, data=json.dumps(data))
    print(req.json())

我应该如何格式化我的数据变量?

只需将你的字典作为你的 json 参数,你不需要指定 content-type headers requests 会为你做。

import requests


def my_function(request):
    url = 'https://blablabla/detailed'
    headers = {'X-Api-Key': 'XXXXXXXX', }

    data = {"dateRangeStart": "2020-05-10T00:00:00.000", "dateRangeEnd": "2020-05-16T23:59:59.000", "amountShown": "HIDE_AMOUNT", "detailedFilter": { "page": "1", "pageSize": "50", }, }
    
    req = requests.post(url, headers=headers, json=data)
    print(req.json())

如果您没有设置 content-type header 会尝试为您设置:

  • 当使用关键字参数 json 时:它将设置为 application/json
  • 当使用关键字参数 data 时(并且传递的值符合某些条件,大多数情况下您不必担心):它会将其设置为 application/x-www-form-urlencoded
  • 如果两个 kwargs 都存在 data 优先于 header 所以它将被设置为 application/x-www-form-urlencoded

我没有详细说明使用 kwarg files 时的行为,因为它真的很长而且超出了这里的范围。

Here's the source code.