之前一直使用 fiddler 来抓包数据并转发到自建 server, 但 fiddler 缓存太大, 只能通过关闭重启 fiddler 才能清除缓存, 电脑内存不够是很麻烦的事. 现在有了 anyproxy 就解决了缓存问题.
anyproxy 是和 fiddler 基本作用一样的抓包工具, 安装不介绍了, 都能搜到, 写写 rule.js 的二次开发.
anyproxy 默认启动加载的规则文件路径在
C:\Users\li\AppData\Roaming\npm\node_modules\anyproxy\lib\rule_default.js
我们做数据加工或者转发可通过自建 js 来实现. 以 windows 为例:
1. 可在桌面创建 sample.js, 将数据处理逻辑写入 sample.js 中.
2. 打开 cmd, 进入桌面, 或者不进入桌面, 第 3 步写 sample.js 觉得路径也行.
3. 通过 sample.js 启动 anyproxy, 启动命令: anyproxy -i --rule ./sample.js
4. 浏览器登录 127.0.0.1:8002
就能更直观的看到抓包的数据, 浏览器作为调试使用, 真正抓包时不用开启.
说下我踩的坑: anyproxy 是使用的 node.js 语法, 所以编辑 sample.js 时如果使用到 js 的 ajax 语法是无效的. 下面贴一段我使用的抓包数据 body, 并通过 node.js post 请求将数据转发到自建的 server 进行解析.
// sample.js
module.exports = {
//summary: 'customized wechat request',
// beforeSendResponse: 在数据获取成功并解析成功后准备返回给 cli 之前做数据处理.
*beforeSendResponse(requestDetail, responseDetail) {
// 当 anyproxy 匹配到 url 地址中含有 /aw/v4/aw/post/, 将数据 body 通过 node.js 以 json 字符串 post 到自建 server
if (requestDetail.url.indexOf('/aw/v4/aw/post/') != -1) {
var data = {str: responseDetail.response.body.toString()
};
// parse 为自己 server 路径
let res = sendPostHttpRequest(data, 'parse');
}
},
};
// node.js 的 post 请求, 不能用 js 的 ajax 请求
function sendPostHttpRequest(body, route) {var http = require('http')
var querystring = require('querystring');
let options = {
hostname: '127.0.0.1',
port: 5001,
path: '/' + route,
method: 'POST',
headers: {"content-type": 'application/x-www-form-urlencoded'}
};
var contents = querystring.stringify(body);
var req = http.request(options, function(res){res.setEncoding('utf8');
});
req.write(contents);
req.end();};