use*_*844 44 python json python-requests
python Requests包中的data和json参数有什么区别?
从文档中不清楚
这段代码是:
import requests
import json
d = {'a': 1}
response = requests.post(url, data=json.dumps(d))
Run Code Online (Sandbox Code Playgroud)
做任何不同于:
import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)
Run Code Online (Sandbox Code Playgroud)
如果是这样,什么?后者是否自动将content-type标题设置为application/json?
use*_*844 40
为了回答我自己的问题,看来我上面的两个例子做了同样的事情,并且使用json参数确实将content-type标题设置为application/json.在我上面的第一个使用data参数的示例中,content-type需要手动设置标题中的内容.
Gre*_*cki 31
到2020年感觉requests 文档的区别比较清楚了,不过我还是创建了一个PR来更清楚。
PS 这不回答 OP 问题,但如果第一个代码会有所不同:
import requests
import json
d = {'a': 1}
response = requests.post(url, data=d)
Run Code Online (Sandbox Code Playgroud)
-请注意,dict d是不是转换成JSON字符串在这里!
如果第二个代码相同(复制它以保持完整性):
import requests
import json
d = {'a': 1}
response = requests.post(url, json=d)
Run Code Online (Sandbox Code Playgroud)
……那么结果就会大不相同。
第一个代码将生成一个内容类型设置为application/x-www-form-urlencoded并且数据采用这种格式的请求,因此:"a=1"
第二个代码将生成一个内容类型设置为application/json这种格式的数据的请求,因此{"a": 1}- 一个 JSON 字符串。