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

Karate工具问题:无法将API响应提取的Header值传入另一API请求头

问题场景

我将ETag的值存储到变量etag后,打印显示为["3"]:

Given path '/price/v4/quote/',quoteId,'/products'
And request requestPayload
When method POST
- print 'headers:', karate.prevRequest.headers
Then status 200
And def etag = responseHeaders['ETag']
- print etag
[print]
["3"]

随后把这个变量传入另一个API的请求头:

* header If-Match = etag
Given path '/price/v4/quote/',quoteId,'/accept'
And request requestPayload
When method PUT
* print 'headers:', karate.prevRequest.headers
Then status 200
* print karate.pretty(response)

结果因ETag头格式错误触发报错:

Got invalid quoteVersion for quote 'b25f50bc-0479-4390-b4fe-0620fc6c6139'. quoteVersion '[\"3\"]', actualVersion '3'

解决方法

Karate里responseHeaders的每个头字段值都是数组类型(HTTP协议允许同名字段存在多个值),所以你拿到的etag是包含单个元素的数组["3"],直接赋值会把数组格式带入请求头。

只需要取数组的第一个元素即可修正格式:

And def etag = responseHeaders['ETag'][0]

修改后etag的值变为字符串"3",再设置到If-Match头就符合接口要求了。

完整修正后的代码片段:

Given path '/price/v4/quote/',quoteId,'/products'
And request requestPayload
When method POST
Then status 200
And def etag = responseHeaders['ETag'][0]  // 提取数组第一个元素
- print etag  // 此时打印结果为"3"

* header If-Match = etag
Given path '/price/v4/quote/',quoteId,'/accept'
And request requestPayload
When method PUT
Then status 200

额外提示

如果不确定ETag头是否存在多个值,也可以用Karate的first()函数安全获取第一个元素:

And def etag = first(responseHeaders['ETag'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:35:31