[英]Python requests library: use of json.dumps
潜在的新手问题,但长期以来一直困扰着我。
在很多 Python 教程中,我看到了非常相似的片段,用于将某些内容发布到 REST API
import json
import requests
url = 'https://api.blabla.com/v1'
token = '1234'
headers = {
'Authorization: f'Bearer {token}',
'Content-Type: 'application/json'
}
body = {
'name': 'Test name'
}
my_response = requests.post(url, headers=headers, data=json.dumps(body)).json()
print(my_response)
请求文档说数据对象应该接收一个字典。 在上面,主体已经是一个字典,那么为什么需要使用json.dump
因为这基本上使它成为一个字符串(而文档说它应该是一个字典)。
那么为什么不应该是:
my_response = requests.post(url, headers=headers, data=body).json()
另一方面,官方请求文档还说我们可以传递 json 参数,在这个例子中它会是(如果我们遵循文档):
my_response = requests.post(url, headers=headers, json=body).json()
但是 JSON 参数应该是一个 JSON 对象,所以如果我们这样传递正文,这意味着我们将一个 dict 对象传递给 JSON 参数,这不是文档所说的。
笔记:
data
- 附加到请求的正文。 如果提供了字典或元组列表[(key, value)]
,则将进行表单编码。https://requests.readthedocs.io/en/master/api/#requests.Request
(强调我的)
如果您将 dict 作为data
传递,它将是form-encoded 。 如果您将 dict 作为json
传递,它将被 JSON 序列化。 json
参数只是data=json.dumps(body)
的便捷简写。 为什么许多人使用后者而不是前者……谁知道呢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.