windows下安装AnyProxy抓取移动App Http请求
AnyProxy是阿里巴巴基于 Node.js 开发的一款开源代理服务器。做为中间代理服务器,它可以收集所有经过它的http请求流量(包括https明文内容);它提供了友好的web界面,便于直观的查看经过它的http请求;同时它支持二次开发,可以用javascript控制整个代理的全部流程,便于前端调试和收集http请求页面内容。它可以用于移动app和移动web页面调试、 抓取。
一、实验环境:操作系统:
Windows 10 X64位 AnyPorxy版本: 3.10.4
二、安装Node.js:
从Node.js官网 官网下载最新版或者稳定版Node.js的msi文件后,双击安装,知道安装完成即可
三、安装和启动AnyProxy:
1、安装AnyProxy:
安装好Node.js后,在windows的命令提示符中输下面命令安装AnyProxy,耐心等待直到安装完成:
npm
install
-g anyproxy
2、生成根证书(RootCA):
https需要证书才能以明文的方式显示请求内容,所有这里我们必须生成根证书。在cmd命令提示符中运行下面命令生成根证书
anyproxy --root
3、启动AnyProxy代理监听服务:
通过”anyproxy -i“命令启动代理监听,其中”-i“参数启用https请求内容解析。
anyproxy -i
通过上面命令启动AnyProxy代理监听服务服务后,AnyProxy会打开两个端口:
* 8001端口:即代理服务端口, 本机的IP和8001用于设置代理,如:192.168.0.119:8001
* 8002端口:AnyProxy的web界面,通过浏览器打开http://192.168.0.119:8002的形式,即可查看所有经过AnyProxy代理的http请求。
四、设置代理(手机端):
1、安装证书
我们需要在被代理的手机上安装证书,这样在AnyProxy上才能以明文的方式查看https请求内容。在手机上安装证书有两种方式:
1. 直接在手机浏览器中打开"http://ip:8002/fetchCrtFile"(IP换成安装AnyProxy机器的IP)
2. 在安装AnyProxy主机上打开”http://localhost:8002/qr_root“,然后用微信 扫描二维码,再通过微信在浏览器中打开的方式安装证书(必须在微信中跳转到浏览器中打开,否则弹不出安装证书对话框)。
2、设置代理(以ios举例):
在手机wifi设置中,手动设置http代理,在服务器中输入安装上面的代理IP,端口输入8001,保存即可。这样在此手机上所有的http请求(包括Web站点和收集app,如微信中的http请求),都会通过AnyProxy代理。在安装AnyProxy的电脑上,打开”http://localhost:8002”,即可看到所有被代理的http请求。
5,二次开发:
1,获取相关文档:
github上下载anyproxy开发代码样例 https://github.com/alibaba/anyproxy
下载开发文档: http://anyproxy.io/4.x/
2,阅读anyproxy开发样例代码:
The following are sample rules.* rule__blank.js* blank rule file with some comments. You may read this before writing your own rule file.* 空白的规则文件模板,和一些注释 * rule_adjust_response_time.js* delay all the response for 1500ms* 把所有的响应延迟1500毫秒 * rule_allow_CORS.js* add CORS headers to allow cross-domain ajax request* 为ajax请求增加跨域头 * rule_intercept_some_https_requests.js* intercept https requests toward github.com and append some data* 截获github.com的https请求,再在最后加点文字 * rule_remove_cache_header.js* remove all cache-related headers from server* 去除响应头里缓存相关的头 * rule_replace_request_option.js* replace request parameters before sending to the server* 在请求发送到服务端前对参数做一些调整 * rule_replace_response_data.js* modify response data* 修改响应数据 * rule_replace_response_status_code.js* replace server's status code* 改变服务端响应的http状态码 * rule_reverse_proxy.js* assign a specific ip address for request* 为请求绑定目标ip * rule_use_local_data.js* map some requests to local file* 把图片响应映射到本地
* rule_replace_response_data.js
* modify response data
* 修改响应数据
以此为例开发属于自己的js
3,开发js:
1,新建一js文件,参考rule_replace_response_data.js,添加逻辑,获取想要的信息。
下面附上简单的simple.js,实现将服务端返回的数据保存到本地文件中。
1 var fs = require('fs'); 2 var locallist = 'anyproxy_data/test.txt'; //提前在本代码路径下新建anyproxy_datawen文件夹 3 module.exports = { 4 // 功能描述 5 summary: function() { 6 return "get data from ***"; 7 }, 8 replaceServerResDataAsync: function(req,res,serverResData,callback){ 9 // 匹配接口,将返回的数据写入anyproxy_data/locallist.txt下 10 if (req.url.indexOf(/html/i.test') === 0) { 11 var newDataStr = serverResData.toString(); 12 fs.appendFile(locallist, newDataStr + '\n', 'utf8', function(err) { 13 if(err) { 14 console.log(err); 15 } 16 }) 17 callback(newDataStr); 18 } 19 else{ 20 callback(serverResData); 21 } 22 } 23 };
4,运行:
anyproxy --rule ./rule_sample/simple.js (rule后面是js的路径)
anyproxy -i --rule ./rule_sample/simple.js (rule后面是js的路径,-i是监听https请求)
5,验证:
在手机上发送simple中要求匹配的路径请求,查看anyproxy_data文件夹下面是否都txt文件产生