带多参数的条件GET请求出现查询非法字符问题排查
解决GET请求查询参数含非法字符的问题
问题原因
你的GET请求URL里,查询参数groups的值是JSON数组[["Movie"],["Show"]],但方括号[]、双引号"这类特殊字符直接放在URL中未做URL编码,服务器会判定为非法字符,导致请求失败。
解决方案
在Karate框架中,推荐以下两种处理方式:
方式1:用Karate参数化语法自动编码
不要直接在URL里拼接参数,改用param关键字指定查询参数,Karate会自动对特殊字符做URL编码:
Given header x-apisignatures = '543aba07839' And header ssotoken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJ1bmlxdWUiOiJjYTM4MDAzZS0wYThiLTQ3YjktOWFjNS00YzMyN2MwNTUyMGYiLCJ1c2VyVHlwZSI6IlJJTHBlcnNvbiIsImF1dGhMZXZlbCI6IjIwIiwiZGV2aWNlSWQiOiJlZWIxOGRlOGRiNjE3MDg4MjViNTdjNGU5NDg1ZmFjYTU1MGE1OTBkY2Y1MjIzNzkyYzUwYjVhZWRjZGI5ZmUxNDQxZTFiMzhmZWI2NDFhZmUwNGI3NGY0NDA5OWMzZGQwZWI0OTRiZjgwMTYxOWYyNTAyNjI2YTJjZjdkMTZmZCIsImp0aSI6IjFmN2IwODkxLTJkMGUtNDBhZS04MWJiLWQwODVjY2NhOGYyZSIsImlhdCI6MTY2NDI3Njk0NH0.6Q7CPtQIN0uB1ZbVQBj5dshqioop3dJKEpla5DQS5K5qtRPw38SxTEJ1f1DJ_Ka_sgMp_fdh9EEABipTgtgMqg' And header uniqueid = 'ca38003e-0a8b-47b9-9ac5-4c327c05520f' And header x-page = 'Home' Given url 'https://jiocinemaqa-api.jio.ril.com/user/v1/watchlist' And param groups = '[["Movie"],["Show"]]' When method GET Then status 200 * print response
方式2:手动URL编码参数值
如果需要手动拼接URL,先将groups的值编码为%5B%5B%22Movie%22%5D%2C%5B%22Show%22%5D%5D,替换到URL中:
Given header x-apisignatures = '543aba07839' And header ssotoken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJ1bmlxdWUiOiJjYTM4MDAzZS0wYThiLTQ3YjktOWFjNS00YzMyN2MwNTUyMGYiLCJ1c2VyVHlwZSI6IlJJTHBlcnNvbiIsImF1dGhMZXZlbCI6IjIwIiwiZGV2aWNlSWQiOiJlZWIxOGRlOGRiNjE3MDg4MjViNTdjNGU5NDg1ZmFjYTU1MGE1OTBkY2Y1MjIzNzkyYzUwYjVhZWRjZGI5ZmUxNDQxZTFiMzhmZWI2NDFhZmUwNGI3NGY0NDA5OWMzZGQwZWI0OTRiZjgwMTYxOWYyNTAyNjI2YTJjZjdkMTZmZCIsImp0aSI6IjFmN2IwODkxLTJkMGUtNDBhZS04MWJiLWQwODVjY2NhOGYyZSIsImlhdCI6MTY2NDI3Njk0NH0.6Q7CPtQIN0uB1ZbVQBj5dshqioop3dJKEpla5DQS5K5qtRPw38SxTEJ1f1DJ_Ka_sgMp_fdh9EEABipTgtgMqg' And header uniqueid = 'ca38003e-0a8b-47b9-9ac5-4c327c05520f' And header x-page = 'Home' When url 'https://jiocinemaqa-api.jio.ril.com/user/v1/watchlist?groups=%5B%5B%22Movie%22%5D%2C%5B%22Show%22%5D%5D' When method GET Then status 200 * print response
说明
优先选择方式1,Karate的param语法能自动处理所有需编码的特殊字符,既避免手动编码出错,又提升代码可读性。
内容的提问来源于stack exchange,提问作者Testing
相关产品推荐
相关产品推荐

