乐趣区

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();};

退出移动版