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

Postman CLI运行集合时CookieJar未正确设置双Cookie问题

Postman CLI CookieJar 问题排查与修复

核心问题分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:14:54