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