使用requests.post()向API传递字典时嵌套phases字段丢失问题求助
问题原因
你调用requests.post时使用data参数传递字典,默认会以application/x-www-form-urlencoded格式编码请求体,该格式仅支持平层键值对,无法正确序列化嵌套的字典、列表结构,因此phases这类嵌套字段无法被后端正常解析。而你在Insomnia中发送的是JSON格式请求,本身支持嵌套结构,所以可以正常运行。
可行解决方案
- 优先修改requests请求参数,将
data=data改为json=data:
# 修改后的请求代码 answer = requests.post( url, json=data, # 替换原来的data参数 headers={'Authorization': 'Token ' + request.session['user_token']} )
使用json参数后,requests会自动将字典序列化为符合规范的JSON字符串,同时自动添加Content-Type: application/json请求头,和Insomnia的请求格式完全一致,嵌套字段可以正常传递。
- 若接口要求必须使用表单格式提交,可手动将嵌套结构序列化为JSON字符串作为值传递,后端接收后再反序列化还原结构即可,该方案适配性较差,仅作为备选。
- 后端接收JSON格式请求时,需要从请求体中读取数据解析,不能直接转换表单格式的请求对象,以Django为例:
import json # 从请求body读取JSON数据 flow_data = json.loads(request.body)
内容的提问来源于stack exchange,提问作者searcher__dm01
相关产品推荐
相关产品推荐

