【问题标题】:Finding JSON POST format of an API查找 API 的 JSON POST 格式
【发布时间】:2016-10-15 16:33:38
【问题描述】:

我正在尝试找出将数据发布到使用 django python 构建的旧的无证 API 的格式。

API 使用以下代码提取 POST:

ids = json.loads(request.POST.get("data", "[]"))

ids 是一个整数数组

以下脚本可用于发布到 API:

  data = dict(data="[1,3]")                                                               
  r = requests.post("http://apiurl", auth=("user", "pass"), data=data)

以下不起作用:

data = dict(data="[1,3]")
data = json.dumps(data)
r = requests.post("http://apiurl", auth=("user", "pass"), data=data)

我如何确定第三方需要发布到此 API 以使用它的 json?

【问题讨论】:

  • 这个api在哪里?它是你自己的应用程序吗?向 api 发出 HEAD 或 OPTIONS 请求时的响应是什么?
  • 这是我自己的 API,它是由另一个开发人员编写的。 HEAD 和 OPTIONS 都给出 200。
  • @gmccoy:您必须查看代码。除非您对 API 有所了解,否则将其视为黑匣子可能不会让您走得太远。
  • @gmccoy:这就是 http 状态。响应正文中有什么?而且由于您拥有 api 的服务器端代码,因此您需要了解的所有内容都可以通过阅读找到。如果您无法弄清楚,请在此处发布问题,但在问题中包含相关源代码是必不可少的。

标签: python json django api


【解决方案1】:
In[2]: import json
In[3]: data = dict(data="[1,3]")
In[4]: data
Out[4]: {'data': '[1,3]'}
In[5]: json.dumps(data)
Out[5]: '{"data": "[1,3]"}'

json.dumps(data) 返回字符串。

来自requests doc

:param data:(可选)要发送的字典、字节或类似文件的对象 在 :class:Request 的正文中。

因此,您使用的 API 可以正确处理带有 json 的发布请求:

{"data": "[list of ints]"}
#e.g.
{"data": "[2,3,4,5]"}

那就是你可以找出第三方。

【讨论】:

  • 谢谢,我确实知道了 JSON 会被混淆的语法。
猜你喜欢
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2015-10-04
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多