Postman中用pm.cookies.get("session_id")可直接获取指定Cookie值,返回字符串或null;注意键名需完全匹配且不区分大小写,HttpOnly和URL编码值均能正确读取。

Postman脚本里怎么用 pm.cookies.get() 拿指定 Cookie
直接用 pm.cookies.get("session_id") 就能取到名为 session_id 的 Cookie 值,返回的是字符串或 null(没找到时)。注意它不区分大小写,但匹配的是完整键名,不是子串。
常见错误是写成 pm.cookies.get("Session-ID") 却实际服务端设的是 session-id ——Postman 默认按原始响应头里的键名存储,而响应头里的 Cookie 键名通常是小写带连字符的。建议先在 Postman 的「Cookies」标签页点开查看真实键名。
- 如果 Cookie 是 HttpOnly,依然能通过
pm.cookies.get()读取,Postman 脚本运行在客户端环境但不受浏览器同源策略限制 - 若值含 URL 编码(如空格变
%20),pm.cookies.get()返回的是已解码后的原始值,不用再调decodeURIComponent() - 不能用
pm.cookies.get("JSESSIONID; Path=/")这种带属性的写法——只认键名,其余忽略
为什么 pm.cookies.jar().get() 有时返回 undefined
pm.cookies.jar().get() 是异步方法,必须传回调函数或用 async/await,直接赋值会得到 undefined。这是最常踩的坑:以为和 pm.cookies.get() 一样是同步的。
典型错误写法:const value = pm.cookies.jar().get("token"); // value 是 undefined
正确写法(推荐 Promise 风格):
pm.cookies.jar().get({ url: pm.request.url.toString(), name: "token" })<br> .then(value => {<br> console.log(value); // 这里才能拿到值<br> });
-
url参数必须提供,且需是完整 URL 字符串(pm.request.url.toString()最稳妥) - 如果请求是重定向链中的一环,
jar().get()默认只查当前请求 URL 对应域的 Cookie,不会跨域查 - 这个方法能拿到 Secure/HttpOnly Cookie,也能查其他域名(只要在 Cookie jar 里存在且满足域匹配规则)
需要批量取多个 Cookie 怎么办
没有内置的“取全部键值对”方法,但可以用 pm.cookies.keys() 先拿键名列表,再逐个 get():
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
const keys = pm.cookies.keys();<br>keys.forEach(key => {<br> const value = pm.cookies.get(key);<br> console.log(`${key}: ${value}`);<br>});
注意:pm.cookies.keys() 返回的是数组,但顺序不保证,也不包含 Domain/Path 等元信息。如果依赖特定域或路径的 Cookie,必须用 jar().get() 并显式传 url 和 domain 参数。
- 如果只是想把几个固定 Cookie 写进下一个请求 Header,更简单的方式是直接在 Tests 里用
pm.environment.set("token", pm.cookies.get("XSRF-TOKEN")),然后在下个请求的 Authorization 或 Header 里用{{token}} -
pm.cookies.has("key")可以提前判断是否存在,避免get()返回null后做空值处理
Cookie 值取出来后怎么安全用在后续请求里
别直接拼接进 URL 或 Body。优先走 Postman 的变量注入机制:{{cookie_value}} 放在 Header、URL 参数或 Body 中,由 Postman 自动替换。
如果必须在脚本里动态构造(比如加签名),注意两点:
- Cookie 值里可能含特殊字符(如
=、;),但 Postman 脚本里拿到的已是规范解码后的字符串,可直接用,无需额外处理 - 如果目标接口校验 Cookie 的 Domain/Path,而你从 A 域取的 Cookie 用在 B 域请求里,服务端很可能拒绝——这时得用
jar().get()显式指定目标url,确保取的是该域下有效的 Cookie - 敏感 Cookie(如
refresh_token)不要console.log,尤其别提交到 Git;Postman 的 Environment 变量比脚本内硬编码更可控
真正容易被忽略的是 Cookie 的生命周期匹配:脚本里取到的值,未必是最新一次响应设置的那个。Postman 的 Cookie jar 是累积更新的,但如果中间有请求没带 Set-Cookie,旧值会一直保留。调试时要确认你取的是哪次响应写入的值。

















