[英]Difference between data and json parameters in python requests package
python Requests包中的data和json参数有什么区别?
从文档中不清楚
这段代码是否:
import requests
import json
d = {'a': 1}
response = requests.post(url, data=json.dumps(d))
请注意,我们在这里将dict
转换为 JSON ☝️!
做任何不同的事情:
import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)
如果是这样,是什么? 后者是否自动将标题中的content-type
设置为application/json
?
为了回答我自己的问题,我上面的两个示例似乎做了同样的事情,并且使用json
参数确实将标题中的content-type
设置为application/json
。 在上面使用data
参数的第一个示例中,标题中的content-type
需要手动设置。
到2020 年,我觉得requests
文档更清楚地说明了区别,但我仍然创建了一个 PR 使其更清楚。
PS 这不回答 OP 问题,但如果第一个代码会有所不同:
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 字符串。
这里仅从我的经验谈,但请注意,最好将json
字段与 dict 一起使用,而不是将 dict 转储到data
字段中。
再次,仅从经验谈起,我没有研究代码本身,但似乎 requests 库做了一些比json.dumps
更聪明的 json 序列化。 在data
字段中使用json.dumps
时,我遇到了几个实例,其中导致来自(FastAPI)服务器的“值不是有效的字典”错误响应。 改用json
字段解决了这些问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.