insomnia预请求脚本支持五种动态配置:一、设时间戳变量;二、用cryptojs生成hmac-sha256签名头;三、拼接bearer token至authorization头;四、生成uuid作x-request-id;五、解析重写json body嵌套字段。

如果您在使用 Insomnia 进行 API 测试时,需要在请求发出前动态生成或修改请求参数、Header、Body 或认证信息,则可通过预请求脚本(Pre-request Script)实现。以下是针对该需求的多种脚本编写方法:
一、设置动态时间戳参数
预请求脚本可用于为请求 URL 或 Body 注入当前时间戳,避免缓存或满足接口对时间参数的校验要求。
1、在 Insomnia 中选中目标请求,点击右侧面板中的 “Pre-request Script” 标签页。
2、输入以下 JavaScript 代码:
const timestamp = Date.now().toString();
insomnia.setEnvironmentVariable('current_timestamp', timestamp);
3、在请求 URL 或 JSON Body 中引用该变量,例如:{{current_timestamp}}。
二、生成 HMAC-SHA256 签名头
当后端要求基于密钥与请求内容生成签名并放入 Header 时,可利用 CryptoJS 库在预请求脚本中完成计算。
1、确保 Insomnia 已启用内置的 CryptoJS 支持(Insomnia v8.0+ 默认支持)。
2、在 Pre-request Script 中写入:
const secret = 'your_api_secret';
const message = insomnia.getEnvironmentVariable('method') + ':' + insomnia.getEnvironmentVariable('path');
const hash = CryptoJS.HmacSHA256(message, secret).toString(CryptoJS.enc.Base64);
insomnia.setEnvironmentVariable('auth_signature', hash);
3、在请求 Headers 中添加键值对:X-Signature: {{auth_signature}}。
三、从环境变量读取并拼接 Token
适用于 OAuth2 或 JWT 场景,需在请求前组合 access_token 与固定前缀(如 Bearer),并注入 Authorization 头。
1、确认环境变量中已定义 access_token 字段。
2、在 Pre-request Script 中执行:
const token = insomnia.getEnvironmentVariable('access_token');
if (token) {
insomnia.setEnvironmentVariable('auth_header_value', 'Bearer ' + token);
}
3、在请求 Headers 中设置:Authorization: {{auth_header_value}}。
四、随机生成 UUID 作为请求 ID
用于链路追踪或日志关联,需每次请求前生成唯一字符串并注入 X-Request-ID 头。
1、在 Pre-request Script 中粘贴标准 UUID v4 生成逻辑:
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = Math.random() * 16 | 0;
const v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
insomnia.setEnvironmentVariable('request_id', uuidv4());
2、在 Headers 中添加:X-Request-ID: {{request_id}}。
五、解析并重写 JSON Body 中的嵌套字段
当原始 Body 是 JSON 格式且需动态替换其中某个深层字段(如 user.id 或 order.items[0].price)时,可先解析再序列化。
1、在 Pre-request Script 中获取当前 Body 内容:
const rawBody = insomnia.getRequestBody();
try {
const bodyObj = JSON.parse(rawBody);
bodyObj.user.timestamp = Date.now();
bodyObj.user.session_id = 'sess_' + Math.random().toString(36).substr(2, 9);
insomnia.setRequestBody(JSON.stringify(bodyObj));
} catch (e) {
// 忽略非 JSON 格式 Body
}
2、确保请求 Body 类型为 JSON,且未勾选 “Automatically set Content-Type header” 的覆盖选项。











