Requests(三):json请求中 中文乱问处理

场景:json格式请求数据中有中文,导致服务端签名失败

{"inputCodes":["6932608700850"],"terminal":{"status":1,"channel":"D002","storeCode":"2107","passage":"D002","storeName":"管理员","identity":"","maxProductCount":5,"posId":"D002"}}
header={"client_id":"DataSync","sign":"46BA170CFC30C571358E59EDDA63B506","Content-Type":"application/json;charset=UTF-8"}

在使用requests 库的post 请求发送出去之后,服务端收到的不是中文,导致签名失败,数据如下:

{"terminal": {"status": 1, "channel": "D002", "identity": "", "passage": "D002", "maxProductCount": 5, "posId": "D002", "storeName": "\\u91cd\\u767e\\u8d85\\u5e02\\u9ec4\\u6ce5\\u585d\\u5e97", "storeCode": "2107"}, "inputCodes": ["6932608700850"]}

 

希望在服务端中收到的数据中,中文仍然是中文,因为有些服务端并没有做此处理。

解决方法:

requests 库中,在处理json 格式的请求时调用的json.dumps方法参数 ensure_ascii 默认为Ture,表示序列化时对中文

默认使用的ascii编码

如果想要显示中文,则将此参数的值改为False即可。

源码修改:

在requests源码的models.py文件中,找到prepare_body函数。找到如下图中的代码,

在comlexjson.dumps(json)里加个参数ensure_ascii=False.

 

 保存源码的修改之后,再次运行,在服务器端就能看到中文啦。

 

posted @ 2022-01-05 13:40  乘风破浪的小落夜  阅读(213)  评论(0编辑  收藏  举报