requests(⼀):发送⼀个json格式的post请求
爱搜索acesse会员登录入口今天给⼀位同学解决 post 发送数据格式为 JSON 格式的请求,顺便确认⼀下问题归属。
背景:
⽤ postman ⼯具发送⼀个数据格式为 JSON 的请求,得到了服务器的响应。
⽤ python 的 requests 库写的请求,却报错了。没有得到该有的结果。
解决⽅法:
先确认⾃⼰的请求信息和函数使⽤正确。包括请求头、请求体和参数传递。
看服务端的⽇志,如果服务端的⽇志当中收到了这 2 个请求的请求数据,看⽇志中提⽰什么错误并⽐对⼀下 2 份请求数据的不同,顺便有需要开开聊聊。
基于此,来说说 requests 中发送 JSON 格式的处理。
1、JSON 数据格式的请求头
reactive vue3在 post 请求当中,JSON 数据格式的请求,请求头常规为:
Content-Type:application/json
2、requests 库中 post 请求的 JSON 参数python请求并解析json数据
  post 请求⽅法:post(url,data=None,json=None,**kwargs)
python 的 requests 的 post 请求中,有⼀个 JSON 参数。源码中对于此参数的说明如下:
⼀个 JSON 序列化的 python 对象。python 中字典表达与 JSON 很相似。kettles
在 post 请求中,对传进来的 JSON 值,会做如下处理:
  1、会使⽤ JSON 模块中的 dumps ⽅法转成 JSON 数据。
  2、会增加消息头中的 content_type 为 application/json
JSON 参数不需要提前使⽤ JSON 模块的⽅法转成 JSON 字符串。
所以,JSON 参数不需要提前使⽤ JSON 模块的⽅法转成 JSON 字符串。
请注意,这⾥有坑:如果在传参时,提前转换成 JSON 字符串:quest("post",url,json=json.dumps(a)
json=json.dumps(a),headers=headers)请注意,这⾥有坑
在 post 请求中,还会再使⽤ jsons 模块转成 JSON 数据。那么此时的请求数据会在最外多了⼀层引号。
请求数据结果为:"{\"pwd\": \"1234567890\", \"mobilephone\": \"186********\"}"
⽽实际上我们要发送的数据是没有外层引号的,即:{\"pwd\": \"1234567890\", \"mobilephone\": \"186********\"}
源码如下:
728 x 327 1054 x 473
3、⽰例代码(仅为⽤法⽰例。演⽰接⼝并不⽀持 application/json 格式):
importrequestsa = {"mobilephone":"186********","pwd":"xxxxxxxxxxxx"}url ="XXXXXXXX"#消息头指定headers =
{'Content-Type':'application/json;charset=UTF-8'}#发送post请求 json参数直接为⼀个字典数据。res =
百度对联广告代码
打印发送出去的请求数据,请求的结果:
sessions.py499⾏ 打印发送请求数据: 请求头为: {'User-Agent':'python-requests/2.19.1','Accept-Encoding':'gzip, deflate','Content-Type':'application/json;charset=UTF-8','Content-Length':'51','Connection':'keep-alive','Accept':'*/*'}请求体为: b'{"pwd": "1234567890", "mobilephone": "186********"}'200{"status":0,"code":"20103","data":null,"msg":"⼿机号不能为空"}
>饿了吗美好盒子

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。