示例脚本
参数配置位置
必要参数
django
项目仅需要设置domain
即可,比如www.baidu.com
,baidu.com
尽量域名精确避免修改到其他域的参数
必须把这个domain
添加到 cookies->Manage cookies ->Domains Allowlist
中,否则cookie的注入失败
代码
// 必须把这个domain添加到 cookies->Manage cookies ->Domains Allowlist 中,否则cookie的注入失败
var domain = pm.environment.get("domain") || pm.globals.get("domain");
// console.log("domain:",domain)
// 获取全局变量的csrf, csrf为任意64位字符串若不设置则使用默认
var csrf = pm.globals.get("csrf") || "0123456789012345678901234567890123456789012345678901234567891234";
// 若没有设置环境变量则取全局变量
var csrf_cookie_name = pm.environment.get("csrf_cookie_name") || pm.globals.get("csrf_cookie_name")
// 默认为django设置的名字为csrftoken
var default_csrf_cookie_name = "csrftoken"
if (csrf_cookie_name) {
// 如果有csrf_cookie_name
csrf_cookie_name = csrf_cookie_name;
} else {
// 如果没有
csrf_cookie_name = default_csrf_cookie_name;
}
// console.log("csrf_cookie_name:", csrf_cookie_name);
// 删除原来的csrf头
pm.request.removeHeader("X-CSRFToken");
// 添加header
pm.request.addHeader(`X-CSRFToken:${csrf}`);
//创建一个cookie容器
const cookieJar =pm.cookies.jar();
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function deleteCookie(domain, cookieName) {
return new Promise((resolve, reject) => {
//删除cookie中的cookieName,参数: url,cookieName,回调函数function(异常)
cookieJar.unset(domain, cookieName, function (error) {
// console.log(`删除 ${cookieName} cookies`);
// console.log("error", error);
if (error) {
reject(error);
} else {
resolve();
}
});
});
}
async function checkAndSetCookie(domain, cookieName, csrf) {
// 睡眠10毫秒
await sleep(10);
// 查看 Cookie 是否存在
cookieJar.get(domain, cookieName, function (error, cookie) {
console.log("查看");
console.log("cookie", cookie);
// console.log("error", error);
if (!cookie) {
// 如果没有找到 Cookie,设置它
console.log("未找到 Cookie,开始设置");
cookieJar.set(domain, cookieName, csrf, function (error, cookie) {
console.log(`设置 ${cookieName} Cookie 为 ${cookie}`);
// console.log("cookie", cookie);
// console.log("error", error);
// 设置完成后再次调用检查函数
checkAndSetCookie(domain, cookieName, csrf);
});
} else {
// 如果找到 Cookie,输出成功信息
console.log("Cookie 已存在,结束");
}
});
}
(async function() {
try {
// 首先删除 Cookie
await deleteCookie(domain, csrf_cookie_name);
// 然后开始检查和设置 Cookie
checkAndSetCookie(domain, csrf_cookie_name, csrf);
} catch (error) {
console.error("删除 Cookie 失败:", error);
}
})();