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
吗?
答案 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字符串。