ProxyPin onRequest 钩子 修改请求发出前
典型使用场景
场景一:自动注入鉴权 Token
测试环境需要临时给请求加 Token,不想改 App 代码:
function onRequest(context, request) {
// 只对 API 请求生效
if (request.url.includes('/api/')) {
request.headers['Authorization'] = 'Bearer test-token-xyz';
context.log('注入 Token 到 ' + request.url);
}
return request;
}
场景二:API 版本切换
临时测试新版 API,但不想改 App 里的所有路径:
function onRequest(context, request) {
// 把 v1 路径的请求转到 v2
if (request.url.includes('/api/v1/')) {
request.url = request.url.replace('/api/v1/', '/api/v2/');
context.log('API 版本切换 v1→v2');
}
return request;
}
场景三:请求参数修改
把 GET 请求里的某个查询参数改掉:
function onRequest(context, request) {
if (request.method === 'GET' && request.url.includes('/users')) {
// 替换 query 参数
let url = new URL(request.url);
url.searchParams.set('page', '2');
url.searchParams.set('debug', 'true');
request.url = url.toString();
}
return request;
}
场景四:条件性屏蔽请求
某些请求不希望发出去,但又不想配置全局屏蔽规则(影响范围太大):
function onRequest(context, request) {
// 屏蔽支付确认请求(只在调试时)
if (request.url.includes('/payment/confirm')) {
context.log('DEBUG: 屏蔽支付确认请求');
return null; // 返回 null = 屏蔽
}
return request;
}
场景五:添加调试头
给所有请求加自定义 Header,让后端知道这是调试流量:
function onRequest(context, request) {
request.headers['X-Debug-Source'] = 'ProxyPin-Debug';
request.headers['X-Debug-Timestamp'] = Date.now().toString();
return request;
}
错误处理
脚本执行出错时:
- ProxyPin 控制台会打印错误堆栈
- 请求会回退到原始状态(未被脚本修改)
- 不会中断整个代理流程
调试脚本时建议多加 context.log() 打印关键节点信息。