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

如何在Karate中转义[]?请求参数转义异常求助

问题:Karate中请求参数二次转义导致500错误的解决方法

问题背景

目标请求URL为:

http://localhost:8080/rest/object/number/24/render?rendering=%5BREAR%5D

其中%5BREAR%5D是[REAR]的URL转义结果,在Postman中需要手动对[]转义才能正常请求。

编写的Karate脚本如下:

Scenario Outline: GET Render Object (Front and Rear)
    * header Authorization = $authHeader
    Given url $baseUrl
    And path "/object/number/" + "24" + "/render"
    And param rendering = <render>
    When method GET
    Then status 200
    And match header Content-Type == 'image/svg+xml'

    Examples:
    | render       |
    | %5BREAR%5D   |
    | '%5BREAR%5D' |
    | "%5BREAR%5D" |

所有示例均返回500状态码,查看实际请求URL发现参数被二次转义:

http://localhost:9999/rest/object/number/24/render?rendering=%255BREAR%255D

%5BREAR%5D被转成了%255BREAR%255D(%被再次转义为%25),导致服务端无法识别参数。

解决方法

Karate的param关键字会自动对参数值进行URL编码,因此不需要提前手动转义参数,直接传入原始的[REAR]即可:

修改后的脚本如下:

Scenario Outline: GET Render Object (Front and Rear)
    * header Authorization = $authHeader
    Given url $baseUrl
    And path "/object/number/" + "24" + "/render"
    And param rendering = <render>
    When method GET
    Then status 200
    And match header Content-Type == 'image/svg+xml'

    Examples:
    | render   |
    | [REAR]   |

原理说明

  • 传入[REAR]作为参数值时,Karate会自动将[转义为%5B、]转义为%5D,最终生成的参数就是%5BREAR%5D,和Postman中的正确请求一致。
  • 若提前传入已转义的%5BREAR%5D,Karate会再次对%进行转义(%的URL编码是%25),导致二次转义问题。

特殊场景处理(可选)

如果遇到需要手动控制编码逻辑的场景,可以使用Karate内置的karate.encode()函数明确指定编码行为,但此场景下无需使用。

内容的提问来源于stack exchange,提问作者mixIrico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:07:11