requests--post中json中文编码问题

发布时间 2023-08-02 09:49:28作者: 郭小睿

问题

requests post 提交 json 数据时,默认在库中 ensure_asciiTrue。会对中文进行 unicode 编码。

但是有的时候服务端并没有处理中文,没有进行解码,而我们又改不了服务端,就会出现问题!

解决

修改库的代码,添加上对应的 ensure_ascii 参数。不推荐,换个环境就用不了了。

推荐: 自己提交json,自己提交二进制数据,不让库来编码我们的数据。

因为不是用 json 关键字参数,不会自动在请求头中添加 Content-Type,所以我们必须手动在请求头中添加 "Content-Type": "application/json"。大致代码如下:

import json
import requests

headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
response = requests.post('https://httpbin.org/post', data=json.dumps({'id': 1, 'name': '杰克'}, ensure_ascii=False).encode("utf-8"), headers=headers)
print(response.text)