anyproxy抓取移动http、https请求

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
    * 把图片响应映射到本地
View Code
                      
                        * 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文件产生
 
            
 
 
 
 
 
 
 
 
 
 
 
 

posted on 2017-08-18 17:00  在他乡123  阅读(2834)  评论(1编辑  收藏  举报

导航