python-requests:我的 python 脚本和他们的 curl 命令有什么不同?

python-requests: What is different here between my python script and their curl command?

有一些 api endpoint,我尝试用这样的代码发送 POST 请求

import requests
url = 'https://deviantart.com/api/v1/oauth2/collections/folders/create'
headers = {'Content-Type': 'application/json'}
data = {'folder': 'folder_name'}
params = {'access_token': '<authorization_code_flow_token>'}
r = requests.post(url=url,
                  headers=headers,
                  params=params,
                  json=data)
print(r.text)

但我收到 400 条回复:

{
  "error":"invalid_request",
  "error_description":"Request field validation failed.",
  "error_details":{"folder":"folder is required"},
  "status":"error"
}

我不明白为什么会失败,因为他们的 curl 示例工作正常。

curl https://www.deviantart.com/api/v1/oauth2/collections/folders/create \
-d "folder=Awesome Collection" \
-d access_token=Alph4num3r1ct0k3nv4lu3

post responses to get authenticated 成功了。
我尝试更改 content-type header(json 和 x-www-formurlencoded)并以不同的方式传递 data-payload(将 json 字符串传递给数据参数,传递 dict到 json,将 paylod 作为查询字符串传递)。但它不起作用。我不知道我做错了什么。似乎我发送了错误的有效载荷或输入了错误的 headers,但我尝试了很多“组合”,但仍然没有效果。

下一个小时,如果你想尝试帮助你可以使用 access_token: ba4550889c8c36c8d82093906145d9fd66775c959030d3d772

以下代码将起作用。

import requests

url = "https://www.deviantart.com/api/v1/oauth2/collections/folders/create"

payload={'folder': 'Awesome Collection',
'access_token': 'ba4550889c8c36c8d82093906145d9fd66775c959030d3d772'}
files=[]
headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)