簡單介紹Anyproxy
Anyproxy 是alibaba 前端團隊開源的http/https 的代理工具
官網地址:http://anyproxy.io/cn/
環境要求:需要安裝nodejs
提供的功能:
- 調試線上頁面,需要注入某個腳本,或是替換一些html數據。比如常用的移動端調試工具weinre就依賴這種方法
- 不改url,把請求發送到某台指定的服務器,移動端的dns結果有緩存,改host又效率太低
- 查看頁面首次打開時的表現,需要阻止CDN提供304這樣的響應
- 服務器不支持跨域頭Access-Control-Allow-*,調試時卻需要發送跨域請求。本地服務器調試app中嵌入的離線頁面時常面對這種需求
- 替換cookie,快速實現多賬戶切換
- 模擬各類網速環境
- 接管某個API的響應,進行數據mock
實際操作,查找制定名稱的請求
我使用的anyproxy@beta。
安裝命令
sudo npm install -g anyproxy@beta
啟動
anyproxy
出現如下
➜ ~ anyproxy
[AnyProxy Log][2017-02-07 10:43:23]: the default rule for AnyProxy.
[AnyProxy Log][2017-02-07 10:43:23]: Anyproxy rules initialize finished, have fun!
[AnyProxy Log][2017-02-07 10:43:23]: GUI interface started at : http://172.18.6.97:8002/
[AnyProxy Log][2017-02-07 10:43:23]: Http proxy started at 172.18.6.97:8001
代理的ip為 172.18.6.97 端口為8001
界面地址為http://172.18.6.97:8002/,可以在瀏覽器打開該地址
將手機的網絡請求設置代理服務器
設置完成后,打開app進行操作
在GUI頁面中設置過濾關鍵字
可以看到帶有pageapp的請求就被過濾出來了。
現在我打算把這些記錄導出,界面上看來沒有辦法了。我們通過rule.js 來實現
先關閉之前的anyproxy ,按照如下命令啟動
anyproxy --rule Documents/rules/pageapp.js
pageapp.js 內容如下
var logMap = {} var fs = require('fs'); var logger = fs.createWriteStream(__dirname + '/urlLog.log', { flags: 'a' // 'a' means appending (old data will be preserved) }) function logPageFile(url) { if (!logMap[url]) { logMap[url] = true; logger.write(url + '\r\n'); } } module.exports = { summary: function() { return "查找app中的帶有pageapp的h5請求"; }, replaceResponseStatusCode: function(req, res, code) { return new Promise((resolve, reject) => { if (code == 200 && /pageapp/g.test(req.url) && res.headers['Content-Type'] == 'text/html') { logPageFile(req.url) } resolve(code); }); } }
這樣就可以抓取到瀏覽過的h5地址了