根本原因是Postman v8.0+强制实施域名白名单安全策略,未列入白名单的域名(如127.0.0.1)调用pm.cookies.jar().set()时会因权限拒绝而报错;白名单须严格匹配host、区分大小写、不支持通配符,且需重启Postman生效。

Postman 脚本无法设置 Cookie 的根本原因,90% 是没加域名白名单 —— 不是代码写错,而是权限被拒绝。
为什么 pm.cookies.jar().set() 报错 “CookieStore: programmatic access to '127.0.0.1' is denied”
Postman 从 v8.0+ 开始强制限制脚本对 Cookie 的编程访问:除非域名明确列入白名单,否则 pm.cookies.jar() 的所有操作(set、get、unset)都会静默失败或抛出该错误。这不是 Bug,是安全策略升级。
常见触发场景:
- 本地开发用
127.0.0.1或localhost测试,但白名单里只填了localhost,漏掉127.0.0.1 - 使用
http://dev.example.com,但白名单填了example.com(子域不自动继承) - 白名单已添加,但没重启 Postman(变更需重启生效)
怎么打开并正确填写 Cookie 白名单
路径:右上角齿轮图标 → Settings → 左侧选 Cookies → 滚动到底部点 Whitelist Domains
填写规则必须严格匹配请求 URL 的 host 部分(不含协议、端口、路径):
- 请求是
https://api.example.com:8080/v1/login→ 白名单填api.example.com - 请求是
http://127.0.0.1:3000/auth→ 白名单必须含127.0.0.1(localhost不等价) - 要同时支持多个子域,得逐个添加:
dev.example.com、staging.example.com、example.com - 不能用通配符:
*.example.com或example.*无效
pm.cookies.jar().set() 的实际调用要点
即使白名单正确,脚本仍可能因参数格式不对而失效。关键点:
- 第一个参数必须是完整 host 字符串,和白名单条目完全一致(大小写敏感)
- 第二个参数是 cookie 名(如
JSESSIONID),第三个是值(如abc123) - 第四个回调函数必填,否则异步操作不执行;错误不会抛出异常,只进
error分支 - 如果要设
Secure或HttpOnly属性,必须通过响应头Set-Cookie注入,脚本set()不支持这些标志
示例(用于 127.0.0.1:8000):
const cookieJar = pm.cookies.jar();
cookieJar.set('127.0.0.1', 'token', 'xyz789', (error, cookie) => {
if (error) {
console.error('Cookie set failed:', error);
} else {
console.log('Cookie saved:', cookie);
}
});
容易被忽略的兼容性细节
白名单只影响脚本 API,不影响手动添加或 Header 添加方式。但要注意:
- Chrome Interceptor 同步的 Cookie,如果目标域名不在白名单里,脚本仍无法读取它(
pm.cookies.get()返回undefined) - 环境变量中存的 Cookie 字符串(如
{{cookie_str}}),在 Header 中用Cookie: {{cookie_str}}是绕过白名单限制的合法方式 - Postman Web 版(postman.co)不支持白名单功能,脚本操作 Cookie 始终被禁用,必须用桌面版
白名单不是“一劳永逸”的开关 —— 它绑定的是域名字符串,不是网络位置。换一个端口、换一个子域、甚至只是少打一个点,都得重新加。











