Robot Framework调用Postman API含特殊字符报Bad Request错误求助
解决Robot Framework调用API含特殊字符返回Bad Request的问题
核心原因
重装系统后,Python运行时编码、系统区域设置或依赖库版本的差异,导致特殊字符(如Pré-Pago)的编码处理逻辑和Postman/之前环境不一致,引发API请求解析失败。
具体解决方案
1. 强制Python运行时使用UTF-8编码
Windows系统默认编码可能不是UTF-8,即使VS Code设置了UTF-8,Python启动时仍会继承系统编码。可通过两种方式强制:
- 环境变量设置:在系统环境变量中添加
PYTHONUTF8=1,重启VS Code后生效。 - 脚本内设置:在Robot脚本开头添加Python代码块修改默认编码:
*** Keywords *** Init UTF-8 Encoding ${null}= Execute Python Code import sys; reload(sys); sys.setdefaultencoding('utf-8')
在测试用例开头调用该关键字。
2. 明确指定请求头的UTF-8编码
调用API时,给Content-Type头加上charset=utf-8,确保请求体按UTF-8编码发送(Postman会自动处理此头,但Robot脚本可能遗漏):
*** Test Cases *** Call API With Special Char ${headers}= Create Dictionary Content-Type=application/json; charset=utf-8 ${payload}= Create Dictionary plan=Pré-Pago ${response}= RequestsLibrary.Post ${your_api_url} headers=${headers} json=${payload}
3. 对齐RequestsLibrary依赖版本
虽然Robot Framework版本一致,但依赖的robotframework-requests库版本可能不同,导致编码逻辑差异:
- 查看当前版本:
pip show robotframework-requests - 安装和同事相同的版本:
pip install robotframework-requests==X.X.X(替换X.X.X为同事的版本号)
4. 调整系统区域设置
Windows的非Unicode程序语言设置可能影响Python编码:
- 打开「控制面板 → 区域 → 管理」
- 点击「更改系统区域设置」
- 勾选「Beta版:使用Unicode UTF-8提供全球语言支持」(注意:此设置可能导致部分旧程序显示异常,需谨慎)
- 重启电脑后测试
5. 手动编码特殊字符
如果以上方法无效,可手动对特殊字符进行URL编码后再发送:
*** Test Cases *** Encode Special Char Before Request ${encoded_plan}= Execute Python Code import urllib.parse; print(urllib.parse.quote("Pré-Pago")) ${payload}= Create Dictionary plan=${encoded_plan} ${response}= RequestsLibrary.Post ${your_api_url} json=${payload}
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

