Python常见问题 - requests请求参数包含中文报错:UnicodeEncodeError: 'latin-1' codec can't encode characters in position 13-14: 小明 is not valid Latin-1. Use body.encode('utf-8')
背景
在做接口自动化的时候,Excel作为数据驱动,里面存了中文,通过第三方库读取中文当请求参数传入 requests.post() 里面,就会报错
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 13-14: Body ('小明') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.
此时我封装的post请求方法是这样的
def post(self, url, data=None, file=None, header=None, cookie=None): try: res = requests.post(url, data=data, files=file, headers=header, cookies=cookie, verify=False) return res except BaseException as e: loggings.error("post请求错误,错误原因:%s" % e) raise e
这个时候,我们要将传入的参数按照utf-8格式编码
# 先转成Json字符串 data = json.dumps(data) # 按照utf-8编码成字节码 data = data.encode("utf-8")
改造后的方法如下
def post(self, url, data=None, file=None, header=None, cookie=None): try: data = json.dumps(data) data = data.encode("utf-8") res = requests.post(url, data=data, files=file, headers=header, cookies=cookie, verify=False) return res except BaseException as e: loggings.error("post请求错误,错误原因:%s" % e) raise e
当然有更简单的方法就是将字典数据转成json字符串传入,请求参数名叫 data ,代码如下:
def post(self, url, data=None, file=None, header=None, cookie=None): try: data = json.dumps(data) res = requests.post(url, json=data, files=file, headers=header, cookies=cookie, verify=False) return res except BaseException as e: loggings.error("post请求错误,错误原因:%s" % e) raise e
标签:
Python问题解决方案
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具