requests.post 方法 json 和 data 参数的区别
2023-06-13 09:16:00 时间
背景
import requests
requests.post("http://127.0.0.1:8000/", data={'name':'tom'})
requests.post("http://127.0.0.1:8000/", json={'name':'tom'})
最近用 requests 调用一些开放平台的 WEB-API ,从它们的官方文档上看有如上两种参数传递的风格;一开始我以为这两个是可以互换的,后来发现并不是这样,这是两种传参方法,在后台对应着完全不同的处理方式。
针对这个问题,在服务端直接打印 request.headers 和 request.body 可以非常快地看出两者的不同。
实现一个简单的后台
写一个简单的后台处理程序,用它来打印请求对象的 header 和 body 。
def index(request, *args, **kwargs):
logger.info(f"request.headers = {request.headers} .")
logger.info(f"request.body = {request.body} .")
return JsonResponse({})
通过 data 传参数
这种传参方式就是传统的表单提交;这此情况下 Content-Type 会被设置为 application/x-www-form-urlencoded , 数据以 name=value 的形式编码在 body 中。
[INFO] request.headers = {'Content-Length': '8', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': '127.0.0.1:8000', 'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} .
[INFO] request.body = b'name=tom' .
通过 json 传参数
这种方式的话 requests 会把 Content-Type 设置为 application/json,并且 body 里面的值就是字典序列化后的值。
[INFO] request.headers = {'Content-Length': '15', 'Content-Type': 'application/json', 'Host': '127.0.0.1:8000', 'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} .
[INFO] request.body = b'{"name": "tom"}' .
相关文章
- Salesforce JSON应用(一) 反序列化deserializeUntyped方法,序列化serialize方法
- 【Groovy】Groovy 扩展方法 ( Groovy 扩展方法引入 | 分析 Groovy 中 Thread 类的 start 扩展方法 )
- 解析Json字符串的三种方法详解编程语言
- java方法返回json数据详解编程语言
- abap内表数据转JSON格式(两种方法)详解编程语言
- MySQL 服务器更改端口的正确方法(mysql服务器端口)
- Linux下创建图标的简单方法(linux创建图标)
- 轻松掌握:查看Oracle执行计划的方法(查看oracle执行计划)
- MySQL中应用JSON格式存储数据(mysql中json格式)
- MySQL中使用JSON提取值(mysql中json取值)
- 破解Oracle数据库之路从JSON到Oracle的导入(json导入oracle)
- 精简操作以JSON方式修改Oracle数据库中的数据(json修改oracle)
- MySQL中简单高效的json导入方法(.json导入mysql)
- Mysql异常终止解决方法教你不停服务(mysql不停服务)
- 强大的Redis存储JSON的功能(redis里面存json)
- Redis中的TTL方法为Key设置有效期(redis里ttl方法)
- jQueryjqgrid对含特殊字符json数据的Java处理方法
- php中json_decode()和json_encode()的使用方法
- 删除DataTable重复列,只删除其中的一列重复行的解决方法
- Json字符串转换为JS对象的高效方法实例
- 关于php内存不够用的快速解决方法
- 通过url方式传递中文乱码的解决方法
- json中换行符的处理方法示例介绍