python requests踩坑: post请求中data和json的区别

问题

最近在写java的ODD + cucumber的框架,其中的接口调用相比python来说非常繁琐,很不友好,如下图在这里插入图片描述

所以我打算先用python调一下这个接口,代码如下,url已做脱敏处理

import requests
url = "http://xxxxxxxxxxxxxxxxxxx:9660/api/data/odsc/hex"

headers = {
    "accept":"*/*",
    "Connection" : "keep-alive",
    "Content-Type" : "application/json"
}
payload = {
    "topic" : "m-100",
    "vin": "ABCDEFGHIJKLMNOPQ",
    "hexPayload" : "23 23 02 71 62 61 6A 66 67 79 34 6E 77 33 73 39 66 6F 31 34 06 01 00 76 17 04 19 0D 14"
                   " 08 00 05 02 17 04 19 0D 14 08 22 11 67 00 05 55 44 22 11 34 17 11 22 45 35 34 15 44 21 "
                   "45 02 67 48 36 01 06 D1 F5 D5 01 D0 C7 3B 00 00 00 00 20 D6 AE E8 BE 7F 46 FB 75 12 1E "
                   "2A 12 1E AC 10 4C 77 B8 84 D1 26 43 7E 46 3B A7 DB 6B 19 D9 C6 AC 20 91 BE DD D1 2D C2 80"
                   " EB 47 09 87 AA 3A C1 90 0D 03 EB AE 1F 66 F7 2A 3E F6 FF FE 85 46 01 42 A8 41"
}

r = requests.post(url,headers = headers, data = payload)
print(r.text)
print(r.headers)

返回结果400
在这里插入图片描述

总结

经过排查,发现是post中不应该用data = xxx 而已该使用json =, 改完后请求成功,可以正常访问
犯蠢了,太久没用了
在这里插入图片描述

request.传参,json = , data = 以及 params = 这三者的区别

首先,params只适用于get方法。

然后,data = 和 json = 的区别可以用一句话来概括:
json 和 data 传的都是json格式的数据,不过json = 传的值在python中是以字典形式存在的,而data = 传的值在python中是以string形式存在的。

将上面代码中的发送请求的代买改为如下:

r = requests.post(url,headers = headers, data= json.dumps(payload))

在这里插入图片描述
同样的效果

json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)
  (1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
  (2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值