You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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编码:

  1. 打开「控制面板 → 区域 → 管理」
  2. 点击「更改系统区域设置」
  3. 勾选「Beta版:使用Unicode UTF-8提供全球语言支持」(注意:此设置可能导致部分旧程序显示异常,需谨慎)
  4. 重启电脑后测试

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:42:38