Karate框架发送POST请求form字段自动编码导致请求失败如何解决
Karate框架表单字段自动编码问题解决方案
问题根因
Karate默认对application/x-www-form-urlencoded类型的表单请求字段会自动执行URL编码,该逻辑符合HTTP规范,但PayU接口要求surl参数不做编码直接传输,因此触发请求失败。
你之前使用URLDecoder.decode处理参数无效的原因是:解码后的参数传入form field语法后,Karate仍会自动执行一次编码操作,相当于重复处理,无法达到预期效果。
可行解决方案
- 方案1:手动构造原始表单请求体,完全跳过自动编码逻辑
适合表单字段较少的场景,直接将完整表单字符串作为请求体发送,Karate不会做任何编码处理:Scenario: Given url "https://test.payu.in/_payment" And header Content-Type = 'application/x-www-form-urlencoded' And request "surl=/payu/web-response/17703721?appVersion=null&clientId=web-client/1.0" When method POST Then status 302 - 方案2:临时关闭当前请求的自动编码配置,保留原生form field写法
适合存在多个表单字段的场景,configure urlEncode = false仅对当前场景生效,不会影响其他用例:Scenario: Given url "https://test.payu.in/_payment" And configure urlEncode = false And form field surl = '/payu/web-response/17703721?appVersion=null&clientId=web-client/1.0' // 其他表单字段可按正常写法添加,都不会被自动编码 When method POST Then status 302
内容的提问来源于stack exchange,提问作者Uday Kumar
相关产品推荐
相关产品推荐

