Python请求库:使用json.dumps

Python请求库:使用json.dumps,python,python-3.x,Python,Python 3.x,潜在的新手问题,但它已经困扰了我很长时间 在许多Python教程中,我看到了非常类似的代码片段,可以将某些内容发布到RESTAPI import json import requests url = 'https://api.blabla.com/v1' token = '1234' headers = { 'Authorization: f'Bearer {token}', 'Content-Type: 'application/json'

潜在的新手问题,但它已经困扰了我很长时间

在许多Python教程中,我看到了非常类似的代码片段,可以将某些内容发布到RESTAPI

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)
请求文档说数据对象应该接收一个dict。在上面的文档中,主体已经是dict了,那么为什么需要使用
json.dump
,因为这实际上使它成为一个字符串(而文档说它应该是一个字典)

那么为什么不应该是:

my_response = requests.post(url, headers=headers, data=body).json()
另一方面,官方的Requests文档还说我们可以传递json参数,在本例中,它将是(如果我们遵循文档):

但是JSON参数应该是一个JSON对象,因此如果我们这样传递主体,就意味着我们正在向JSON参数传递一个dict对象,而文档中并没有这样说

注:

  • 该官员正在使用
    data=json.dumps(body)
  • W3S正在使用
    data=body
数据
–要附加到请求的主体。如果一本字典或一份清单 元组
[(键、值)]
已提供,表单编码将采用 地点

(强调矿山)

如果您将dict作为
数据
传递,它将是。如果您将dict作为json传递,它将被json序列化。
json
参数只是
data=json.dumps(body)
的简写。为什么很多人使用后者而不是前者…谁知道呢

my_response = requests.post(url, headers=headers, json=body).json()