python字典和json.dumps()的遇到的坑分析
最近項目中需要與管易云erp做對接,看了他的接口文檔,php的示例代碼,于是用python仿寫。
其中傳的參數data中前面幾個json數據是固定的,最后需要加一個簽名,該簽名是對前面的json數據字符串化后,首尾拼接上screct字符串,再做md5處理(32位大寫),再將該簽名添加到之前的json中作為post參數傳遞過去。
問題就出在組裝json字符串和簽名中,因為python內置的字典是無序的,導致我組裝好的json數據作為參數傳遞給自己編寫的簽名函數時,字典內部的順序是變化的,所以簽名前后的md5值不一樣,導致頻頻報錯,自己起初沒在意數據順序的事,因為對接金蝶erp時沒有簽名這一項,數據傳遞的很簡單,導致排錯時方向出現(xiàn)錯誤。后來想到這了顧開始解決。
解決方法是使用collections庫中的OrderedDict(有序字典)模塊,組裝好的數據就不會亂序,做的md5簽名也就前后一致了
但,在對json數據使用json.dumps()方法時,字符串化后的數據在逗號后會有一個空格,導致md5值出錯
原理:
解決方法是
json.dumps(data,separators=(',',':'))
最后,將自己寫的函數留下來做個例子
def getShops(): data = OrderedDict() data["appkey"] = appkey data["sessionkey"] = sessionkey data["method"] = method data["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+secret signCode = hashlib.md5(fullStr.encode("utf-8")).hexdigest().upper() #print(signCode) return signCode
以上就是python字典和json.dumps()的遇到的坑分析的詳細內容,更多關于python字典和json.dumps()的坑的資料請關注腳本之家其它相關文章!
相關文章
pandas factorize實現(xiàn)將字符串特征轉化為數字特征
今天小編就為大家分享一篇pandas factorize實現(xiàn)將字符串特征轉化為數字特征,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12淺談opencv自動光學檢測、目標分割和檢測(連通區(qū)域和findContours)
這篇文章主要介紹了淺談opencv自動光學檢測、目標分割和檢測(連通區(qū)域和findContours),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python中的進程操作模塊(multiprocess.process)
這篇文章介紹了Python中的進程操作模塊(multiprocess.process),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05Python實戰(zhàn)實現(xiàn)爬取天氣數據并完成可視化分析詳解
這篇文章主要和大家分享一個用Python實現(xiàn)的小功能:獲取天氣數據,進行可視化分析,帶你直觀了解天氣情況!感興趣的小伙伴可以學習一下2022-06-06