requests (三):json 请求中中文乱码处理

最近收到一个问题:JSON 格式请求数据中有中文,导致服务端签名失败。

问题详情:

一位同学在发送 JSON 格式的 post 请求时,请求数据中有中文内容:

{“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”: “u91cdu767eu8d85u5e02u9ec4u6ce5u585du5e97”, “storeCode”: “2107”}, “inputCodes”: [“6932608700850”]}

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

解决方法:

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

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

源码修改:

在 requests 源码的 models.py 文件中,找到 prepare_body 函数。找到如下图中的代码,在 comlexjson.dumps(json)里加个参数 ensure_ascii=False.

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

ps:小编个人收集啦许多软测资料,希望能够帮到学软件测试的朋友们软件资料分享包括但不限于:Java自动化测试、Python自动化测试、性能测试、web测试、APP测试

测试开发工具包:appuim安装包、fiddler安装包(也有配套视频教程)、eclipse、git、jmeter、loadrunner、monkey、postman、soapul、Xmind等等

有需要的朋友可以私信小编“资料”免费领取

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月10日
下一篇 2022年1月10日

相关推荐