anyproxy 转发body

之前一直使用 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();
};

你可能感兴趣的:(node.js)