python请求包中数据和json参数之间的差异

时间:2014-11-01 00:46:57

标签: python json python-requests

python Requests包中的data和json参数有什么区别?

目前尚不清楚the documentation

这段代码是什么:

import requests
import json
d = {'a': 1}
response = requests.post(url, data=json.dumps(d))

做一些不同的事情:

import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)

如果是这样,什么?后者会自动将标题中的content-type设置为application/json吗?

2 个答案:

答案 0 :(得分:31)

要回答我自己的问题,我上面的两个示例似乎做了同样的事情,使用json参数确实将标题中的content-type设置为application/json。在我上面的第一个使用data参数的示例中,标题中的content-type需要手动设置。

答案 1 :(得分:19)

截至 2020 ,我觉得requests documentation is more clear的区别在于,但我仍然创建了a PR to make it more clear


PS这不能回答OP问题,但是如果FIRST代码有点不同:

import requests
import json
d = {'a': 1}
response = requests.post(url, data=d)

-请注意,dict d在这里转换为JSON字符串!

如果第二个代码相同(将其复制以确保完整性):

import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)

...那么结果会大不相同。

第一个代码将生成一个内容类型设置为application/x-www-form-urlencoded的请求,并且数据采用这种格式,因此:"a=1"

第二个代码将生成一个内容类型设置为application/json的请求,实际上数据是这种格式的,因此{"a": 1}-一个JSON字符串。