如何在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
相关产品推荐
相关产品推荐

