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文件產生
 
            
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM