【问题标题】:Parse a json-array as "file" in requests.post fails to be send as string在 requests.post 中将 json-array 解析为“文件”无法作为字符串发送
【发布时间】:2021-09-21 12:38:31
【问题描述】:

我正在尝试使用 Facebooks API here 上传一些内容,但我不断收到错误消息“此字段必须是字符串。”,这似乎与我解析“数据”字段的方式有关(如果我将它复制粘贴到他们的 Graph API 中,它可以正常工作)。

如果你不知道file 到 Facebook 的 API 是什么;

data - json array of data 
upload_tag  - string
access_token - token

现在我将数据保存在 pandas 数据框中,我正在使用 data = df.to_json(orient="records") 生成解析到 data 字段中的 json 字符串

data = df.to_json(orient="records")

file = {"access_token":token
upload_tag: "test",
data = data}

r = requests.post(f"https://graph.facebook.com/v11.0/{offline_event_id}/events",files = file)
#{"error":{"message":"(#100) This field must be a string.","type":"OAuthException","code":100,"fbtrace_id":"some_code"}}

我尝试了数据字符串的不同格式,但得到了相同的错误(即使将 Facebook 的示例字符串复制粘贴到我的代码中)。

我想知道在发送 POST 请求时,请求是否以错误的方式格式化文件?查看r.request.body(Facebook 示例数据)我得到以下信息

Content-Disposition: form-data; name="data"; filename="data"

[{"match_keys": {"phone": ["HASH1", "HASH2"], "email": ["HASH3", "HASH4"]}, "currency": "USD", "value": 16, "event_name": "Purchase", "event_time": 1456870902}]

这确实似乎不是一个字符串

【问题讨论】:

    标签: python json facebook-graph-api python-requests


    【解决方案1】:

    我发现this SO 问题与this gist 相关联。 使用函数files = multipartify(file) 接受了请求。老实说,我不知道为什么,但它奏效了。

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多