whistle.script
whistle.script为whistle的一个扩展脚本插件,可以直接在界面上引用全局安装的Node模块及Node的内容模块编写脚本操作请求及其响应,所有正常Node程序可以实现的功能,都可以通过该插件实现,包括:
- HTTP[s]:
- 动态设置whistle规则
- 拦截请求响应
- 控制请求响应速度
- 修改请求url、请求方法、请求头、请求内容
- 修改响应状态码、响应头、响应内容
- 在插件界面的Console上显示脚本程序 console.xxx 的内容,如果可以打印响应的内容或调试信息等
- WebSocket:
- 动态设置whistle规则
- 拦截请求响应
- 修改发送或收到的数据
- 直接向WebSocket客户端或服务端发送数据
- 在插件界面的Console上显示脚本程序 console.xxx 的内容,如果可以打印发送和接收到的数据或调试信息等,从而通过该插件可以直接查看WebSocket的数据
- Tunnel: 基本功能同WebSocket,可以用来直接操作Socket请求,如Protobuf协议的请求等
安装
1 | npm install -g whistle.script |
安装插件后要重启whistle才可以打开插件,否则unknown
使用
打开script插件的界面,创建一个名字为 test 的脚本:
- 可以通过 Plugins->Home->script打开或右键并选择 在新标签页中打开
- 或者直接访问 http://local.whistlejs.com/plugin.script
设置规则
- 设置HTTP或HTTPs请求的whistle规则(操作HTTPs需要开启HTTPs拦截)
在界面中的test 脚本输入
1 | exports.handleRequestRules = (ctx) => { |
如果里面包含一些异步方法可以采用generator函数或async函数,即:exports.handleRequestRules = function* (ctx) {} 或 exports.handleRequestRules = async () => {}
在whistle的Rules配置界面上输入规则:
1 | whistle.script://test www.ifeng.com www.qq.com www.baidu.com echo.websocket.org |
如果需要通过配置给脚本传递一些额外参数,可以如下配置(注意中间不能有空格):
1 | whistle.script://test(a,b,c) www.ifeng.com www.qq.com www.baidu.com echo.websocket.org |
可以在脚本中通过 process.args 获取:
1 | exports.handleRequestRules = (ctx) => { |
- 设置WebSocket请求的规则(需要开启HTTPs拦截):
1 | exports.handleWebSocketRules = (ctx) => { |
接下来的操作同上。
- 设置Tunnel请求的规则(要测试可以暂时关闭HTTPs拦截):
1 | exports.handleTunnel = (ctx) => { |
接下来的操作同上。
操作请求
- 操作HTTP或HTTPs请求(操作HTTPs需要开启HTTPs拦截)
1 | exports.handleRequest = function* (ctx, next) { |
在whistle的Rules配置界面上输入规则:
1 | # 这里不能用whistle.script,否则请求不会转发到handleRequest |
需要在配置中带上参数,可以参考上面的规则设置
- 操作WebSocket请求(需要开启HTTPs拦截)
1 | // Node < 7.6可以改用genrator和yield |
whistle规则配置同上
- 操作Tunnel请求
1 | // Node >= 7.6可以改用async和await |
whistle规则配置同上