python post参数传递不成功_python字典和json.dumps()的遇到的坑分析

6dd6e6c43dc79ec64a1f67805598c386.png

最近项目中需要与管易云erp做对接,看了他的接口文档,php的示例代码,于是用python仿写。

其中传的参数data中前面几个json数据是固定的,最后需要加一个签名,该签名是对前面的json数据字符串化后,首尾拼接上screct字符串,再做md5处理(32位大写),再将该签名添加到之前的json中作为post参数传递过去。

问题就出在组装json字符串和签名中,因为python内置的字典是无序的,导致我组装好的json数据作为参数传递给自己编写的签名函数时,字典内部的顺序是变化的,所以签名前后的md5值不一样,导致频频报错,自己起初没在意数据顺序的事,因为对接金蝶erp时没有签名这一项,数据传递的很简单,导致排错时方向出现错误。后来想到这了顾开始解决。

解决方法是使用collections库中的OrderedDict(有序字典)模块,组装好的数据就不会乱序,做的md5签名也就前后一致了

但,在对json数据使用json.dumps()方法时,字符串化后的数据在逗号后会有一个空格,导致md5值出错

原理:

4c404ac445914c4475290cd2b1cc5e55.png

解决方法是

json.dumps(data,separators=(',',':'))

最后,将自己写的函数留下来做个例子

def getShops():data = OrderedDict()data["appkey"] = appkeydata["sessionkey"] = sessionkeydata["method"] = methoddata["page_no"] = "1"data["page_size"] = "10"data["sign"] = sign(data,secret)response = requests.post(url=url, data=json.dumps(data))print(response.text)def sign(data,secret):str = json.dumps(data,separators=(',',':'))fullStr = secret+str+secretsignCode = hashlib.md5(fullStr.encode("utf-8")).hexdigest().upper()#print(signCode)return signCode

- END -

往期精彩

b7e7ec2074ddb86539aa2ea55e3c6d4a.png

◆  50款开源工具你都用过吗?

◆  你知道Python的就业方向和薪资吗?(赠学习资料)

◆  python网络爬虫的基本原理详解

613796e7c147729efe4a77aa6aa7dc6f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值