Postman原生应用预请求脚本中实现Cookie鉴权自动登录
嗨,这个需求我之前在项目里刚好实现过,完全可以通过Postman的预请求脚本来搞定,下面给你详细说怎么弄:
核心思路很简单:在预请求脚本里先检查当前请求域名下是否存在abc-auth认证Cookie,不存在就调用/login接口获取并设置Cookie,存在就直接跳过登录步骤。
1. 编写预请求脚本
直接把这段代码复制到你的集合或请求的Pre-request Script标签里就行,我会在后面解释关键部分:
// 检查当前域名下是否存在abc-auth Cookie const hasAuthCookie = pm.cookies.has('abc-auth'); if (!hasAuthCookie) { console.log('未检测到abc-auth Cookie,执行登录请求'); // 构造登录请求,建议用环境变量存配置,不要硬写 const loginRequest = { url: pm.environment.get('BASE_URL') + '/login', method: 'POST', // 根据你的实际登录接口方法调整,比如GET header: { 'Content-Type': 'application/json' // 按接口要求设置请求头,比如form-data就改成对应格式 }, body: { mode: 'raw', raw: JSON.stringify({ username: pm.environment.get('LOGIN_USERNAME'), password: pm.environment.get('LOGIN_PASSWORD') }) } }; // 发送登录请求并处理响应 pm.sendRequest(loginRequest, function (err, response) { if (err) { console.error('登录请求失败:', err); pm.test('登录请求失败', () => { throw new Error('登录接口调用出错,请检查账号密码或接口地址'); }); } else { // 从响应头的set-cookie中提取abc-auth并设置到当前域名 const setCookieHeaders = response.headers.all().filter(h => h.key.toLowerCase() === 'set-cookie'); setCookieHeaders.forEach(header => { const cookieParts = header.value.split(';')[0]; // 只提取Cookie的键值对,忽略过期时间等属性 const [cookieName, cookieValue] = cookieParts.split('='); if (cookieName.trim() === 'abc-auth') { pm.cookies.set(cookieName, cookieValue); console.log('已成功获取并设置abc-auth Cookie'); } }); } }); } else { console.log('已检测到abc-auth Cookie,跳过登录'); }
2. 关键细节说明
- Cookie检测:用Postman内置的
pm.cookies.has('abc-auth')可以直接检查当前请求域名下的Cookie,比自己解析Cookie字符串靠谱多了。 - 环境变量的使用:一定要把
BASE_URL、LOGIN_USERNAME、LOGIN_PASSWORD存在Postman的环境变量里,不要硬写在脚本里——一来方便切换测试/生产环境,二来避免敏感信息泄露。 - 处理
set-cookie响应头:登录接口返回的set-cookie可能包含多个Cookie,所以我们要过滤出abc-auth那一项,提取键值对后用pm.cookies.set设置到当前域名,这样后续请求就会自动带上这个Cookie了。 - 错误处理:加上了错误捕获和测试断言,要是登录失败,Postman会直接提示错误,方便你排查问题(比如账号密码错了、接口地址不对)。
3. 额外注意事项
- 如果
/login接口和你要调用的其他接口是跨域的,那设置Cookie的时候需要指定域名,比如pm.cookies.set(cookieName, cookieValue, { domain: 'your-api-domain.com' })。 - 可以打开Postman的Console(右上角的控制台按钮)查看脚本的执行日志,验证逻辑是否正常工作。
- 要是你的登录接口不是返回
set-cookie而是JSON里的token,那逻辑要调整,但根据你的描述,这个脚本完全适用。
内容的提问来源于stack exchange,提问作者PatrickWalker
相关产品推荐
相关产品推荐

