我正在使用javascript k6负载测试工具向我们的应用程序服务器发出http.post请求。
服务器向我发回一个响应,还发送响应头。
其中一个响应标头是发送回我的以下Set Cookie标头:设置Cookie:xx00000000xxxxxxxxxx0000000000xx jwt=<jwt_token>;路径=/;过期=2021年4月23日星期五格林尼治标准时间04:15:19;domain=.somedomain.com;samesite=无;安全
为了通过我的k6测试工具向我的服务器发出后续请求,我想解析上面的Set Cookie值,并只获取<jwt_token>并存储在类似于=>fetched_jwt=<jwt_token>
如何从服务器发回的具有多个值的Set-Cookie标头中获取jwt的值?
根据MDN,设置Cookie语法如下
Set-Cookie: <cookie-name>=<cookie-value>
// and also can be followed by other attribute
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
// but no matter what attributes behind it, cookie name and value will be on first
因此,如果您想要解析它,只需获取第一个属性即可。你可以用String.prototype.split()
来做,然后得到第一个。
const myCookie = unparsedCookie.split(';')[0];
并再次使用String.prototype.split()
来获取其名称和值。
const [name, value] = myCookie.split('=');
const unparsedCookie = 'xx00000000xxxxxxxxxx0000000000xx-jwt=<jwt_token>; path=/; expires=Fri, 23 Apr 2021 04:15:19 GMT; domain=.somedomain.com; samesite=none; secure';
const myCookie = unparsedCookie.split(';')[0];
const [name, value] = myCookie.split('=');
console.log(name);
console.log(value);
但请记住,Setcookie可能被编码为URI组件。
<cookie-value>
可以选择用双引号包装,并包括任何US-ASCII字符,不包括控制字符、空格、双引号、逗号、分号和反斜杠。编码:许多实现对cookie值执行URL编码,但根据RFC规范,这不是必需的。不过,它确实有助于满足允许使用哪些字符的要求。
MDN
因此,您可能需要使用decodeURIComponent()
对其进行解码。
但是,由于您的案例是JWT代币,您不必担心这一点。JWT应该生成为base64url,对url友好。