Karate调用POST接口时出现CircularRedirectException异常求助
Karate POST请求循环重定向问题排查与解决
错误本质
你遇到的CircularRedirectException是因为POST请求触发了循环重定向:请求的HTTPS端点被重定向到同路径的HTTP地址(还多了末尾斜杠),且这个重定向过程反复触发。PUT方法正常,说明服务端对POST请求的路由/重定向规则与PUT不一致。
排查与解决步骤
1. 先验证服务端重定向行为
用curl直接测试POST请求,观察重定向细节:
curl -v -X POST https://l3vpn-api-x-dev-achraf.afn-prv.opc-blue.tb.rns.equant.com/l3vpn/ppp-access/dry-run \ -d @toto-payload.json \ -H "Content-Type: application/json"
重点看响应头的Location字段,确认重定向目标是否合理,是否存在HTTPS转HTTP、路径末尾强制加斜杠等规则。
2. 调整Karate的重定向配置
Karate默认自动跟随重定向,但遇到循环会报错。可以先关闭自动重定向,获取原始重定向响应排查:
Feature: Happy path Background: Given url bvpn.url * def body = read("classpath:bvpn/data/toto-payload.json") # 关闭自动跟随重定向,先查看重定向响应 Given configure followRedirects = false Scenario: Test dry run post BVPN Given path bvpn.path.post.dryRun And request body And headers headersJson When method post # 重定向通常返回301/302状态码 Then status 302 And print response.headers.Location
如果确认服务端重定向逻辑是预期的(比如必须加斜杠),可以尝试允许循环重定向(不推荐,仅临时测试):
Given configure allowCircularRedirects = true
3. 修正请求路径
报错里的重定向目标路径末尾多了斜杠,尝试直接使用带斜杠的路径发起请求:
Scenario: Test dry run post BVPN # 给路径加上末尾斜杠 Given path bvpn.path.post.dryRun + '/' And request body And headers headersJson When method post Then status 200 And print response
4. 排查HTTPS转HTTP的问题
重定向从HTTPS变成HTTP,可能是服务端反向代理或路由配置问题。如果测试环境允许,尝试直接用HTTP发起POST请求:
修改bvpn.url为http://l3vpn-api-x-dev-achraf.afn-prv.opc-blue.tb.rns.equant.com后重新运行测试。
内容的提问来源于stack exchange,提问作者WinDoctor
相关产品推荐
相关产品推荐

