Postman CLI运行集合时CookieJar未正确设置双Cookie问题
核心问题分析
1. 语法错误导致第二个getAll未执行
你贴的Cookie获取代码存在未闭合的回调函数,JS解析失败后直接跳过了第二个getAll的执行:
// 原错误代码 cookieJar.getAll("CLI", (error, cookies) => { if(error){ console.log(error); } else { console.log(cookies) } // 此处缺少 }) 来闭合第一个getAll的回调函数! cookieJar.getAll("CLI2", (error, cookies) => { // ... })
这种语法错误在CLI环境下会静默失效(GUI可能有更明确的报错提示),直接导致后续代码无法运行。
2. Cookie域名设置完全错误
你在POST请求的测试脚本里,把Cookie的域名设成了CLI1和CLI2,这违反了Cookie的域名绑定规则:
// 原错误代码 cookieJar.set("CLI1", "csrftoken", temp9); cookieJar.set("CLI2", "sessionid", temp10);
Cookie是和请求域名绑定的,你的API域名是localhost,后续请求也都发往该域名,所以设置Cookie时必须指定正确的域名localhost,否则这些Cookie不会被自动携带到后续请求,且后续用getAll("CLI")查询时,和设置的域名CLI1不匹配,自然拿不到结果。
修复后的代码示例
1. 修正POST请求的Cookie设置脚本
console.log(pm.request) if (pm.request.url.toString() === "http://localhost:8000/api/auth/login/" && pm.request.method === "GET"){ const cookieJar = pm.cookies.jar() const setCookieHeaders = pm.response.headers.filter(item => item.key === "Set-Cookie") const csrfToken = setCookieHeaders[0].value.split(';')[0].split('=')[1] cookieJar.set("localhost", "csrftoken", csrfToken, (err) => { if (err) console.error(err) }); console.log("Ran GET login tests script") } if (pm.request.url.toString() === "http://localhost:8000/api/auth/login/" && pm.request.method === "POST"){ const cookieJar = pm.cookies.jar() const setCookieHeaders = pm.response.headers.filter(item => item.key === "Set-Cookie") // 用split解析Cookie值,避免硬写slice范围导致的兼容性问题 const csrfToken = setCookieHeaders[0].value.split(';')[0].split('=')[1] const sessionId = setCookieHeaders[1].value.split(';')[0].split('=')[1] console.log(csrfToken, sessionId) // 统一设置域名localhost,与API域名保持一致 cookieJar.set("localhost", "csrftoken", csrfToken, (err) => { if (err) console.error(err) }); cookieJar.set("localhost", "sessionid", sessionId, (err) => { if (err) console.error(err) }); }
2. 修正Cookie获取代码(修复语法+匹配正确域名)
const cookieJar = pm.cookies.jar() // 查询localhost域名下的所有Cookie cookieJar.getAll("localhost", (error, cookies) => { if(error){ console.log(error); } else { console.log("所有Cookie:", cookies) // 可单独提取指定Cookie const csrfCookie = cookies.find(c => c.name === "csrftoken") const sessionCookie = cookies.find(c => c.name === "sessionid") console.log("csrftoken:", csrfCookie?.value) console.log("sessionid:", sessionCookie?.value) } })
额外注意事项
- Postman CLI与GUI的CookieJar行为存在细微差异,务必保证Cookie的域名、路径、过期时间等参数与响应头
Set-Cookie完全一致,不要自定义无关域名。 - 避免直接用
pm.request.url和字符串对比,改用pm.request.url.toString()或pm.request.url.host判断,防止URL对象与字符串对比的潜在问题。
内容的提问来源于stack exchange,提问作者Tim Verhees
相关产品推荐
相关产品推荐

