[TOC]
### 示例說明
巧用FiddlerScript,將抓包獲取到的響應信息轉發到統計服務上,并且設置定時器,每隔n分鐘后重新發起request請求,實現定時監控微信文章的互動量變化。
### 第一步,抓包分析
在PC微信中打開微信文章,通過Fiddler抓包分析可知,統計接口為
```
https://mp.weixin.qq.com/mp/getappmsgext
```
其響應內容格式如下
```
{
"advertisement_info": [],
"appmsgstat": {
"show": true,
"is_login": true,
"liked": false,
"read_num": 30,
"like_num": 0,
"ret": 0,
"real_read_num": 0,
"version": 1,
"prompted": 1,
"like_disabled": true,
"style": 1
},
"reward_head_imgs": [],
"base_resp": {
"wxtoken": 777
},
"more_read_list": [],
"friend_subscribe_count": 0,
"related_tag_article": [],
"original_article_count": 0,
"video_share_page_tag": [],
"related_tag_video": []
}
```
### 第二步,編寫FiddlerScript腳本
在`OnBeforeResponse`代碼塊內,新增關鍵代碼如下
```
//過濾無關請求,只關注特定請求
if (oSession.fullUrl.Contains("/mp/getappmsgext"))
{
var current_time = DateTime.Now;
// 保存請求信息
//oSession.utilDecodeResponse();//消除保存的請求可能存在亂碼的情況
//var fso;
//var file;
//fso = new ActiveXObject("Scripting.FileSystemObject");
//文件保存路徑,可自定義
//file = fso.OpenTextFile("D:\\Sessions.txt",8 ,true, true);
//file.writeLine("Response code: " + oSession.responseCode);
//file.writeLine("Response body: " + oSession.GetResponseBodyAsString());
//file.writeLine("\n");
//file.close();
var res = oSession.GetResponseBodyAsString()
if(res.Contains("read_num")){
// 獲取到閱讀數
FiddlerObject.log(res);
//數據統計開始:把內容通過ajax http發送其它地方
var _xhr = new ActiveXObject('Microsoft.XMLHTTP');
var url = 'http://localhost:8000/wx/monitor/';
//發送的數據參數
var param = {
point: oSession.GetResponseBodyAsString()
};
var par = '';
for (var i in param) {
var _data = escape(param[i]);
par += par ? ("&" + i + "=" + _data) : (i + "=" + _data);
}
//不需要返回值所以寫啦個空回調
_xhr.onreadystatechange = function() {}
_xhr.open('POST', url, true);
_xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
_xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
_xhr.send(par);
//----數據統計結束-----
// 等待n分鐘后,重新發起請求,實行文章互動量監控
while (true){// 進入死循環
var wait_time=5; // 設置等待重試時間
if((DateTime.Now-current_time).Minutes==wait_time){
var oSD = new System.Collections.Specialized.StringDictionary();
FiddlerApplication.oProxy.SendRequest(oSession.oRequest.headers, oSession.requestBodyBytes, oSD, null);
FiddlerObject.log("auto request done...");
break;//注意退出死循環
} //if controll end
} // while loop end
}else{
// 沒有獲取到閱讀數,彈窗提示用戶重新授權
FiddlerObject.alert("請重新打開微信文章進行授權");
} // if end
} // if controll end
```
### 第三步,編寫統計接口
django views.py:
```
@csrf_exempt
def wx_monitor(request):
"""微信單帖監控"""
if request.method == "POST":
point = json.loads(request.POST.get("point", {"msg": "point is null"}))
if point:
appmsgstat = point.get("appmsgstat")
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(point.get("timestamp")))
ret = {
"appmsgstat": appmsgstat,
"timestamp": otherStyleTime
}
add_db_data(ret)
return JsonResponse({"msg": "success"})
monitor_list = get_db_info().get("pt_tmp_db")
return render(request, 'jira_report/monitor_list.html', locals())
def get_db_info():
tmp_db = os.path.join(os.path.dirname((__file__)), "pt_db.json")
with open(tmp_db, "r", encoding="utf8") as fp:
db_data = json.load(fp)
return db_data
def add_db_data(ret):
tmp_db = os.path.join(os.path.dirname((__file__)), "pt_db.json")
db_data = get_db_info()
db_data.get("pt_tmp_db").append(ret)
with open(tmp_db, "w", encoding="utf8") as fp:
json.dump(db_data, fp, indent=4, ensure_ascii=False)
return db_data
```
>[info] 這里以django為例,就是簡單的接收在FiddlerScript中發送過來的請求,將監控到的數據存儲起來,然后在頁面中顯示。
### 第四步,開始監控數據
微信的統計接口,每隔30分鐘會失效,所以在FiddlerScript中,會有個if判斷處理,當沒有統計數據返回時,提醒用戶重新打開微信文章,生成新的統計請求。

統計結果如下:

<hr style="margin-top:100px">
:-: 
***微信掃一掃,關注“python測試開發圈”,獲取更多測試開發分享!***
- 前言
- Fiddler01-抓包原理介紹與配置
- Fiddler02-菜單功能介紹
- Fiddler03-輕松玩轉Fiddler
- Fiddler04-進階使用FiddlerScript
- Fiddler05-使用FiddlerScript對微信文章互動量進行監控
- Postman01-介紹與安裝
- Postman02-HTTP請求與響應
- Postman03-Collection管理與運行
- Postman04 -變量詳解
- Postman05-初級腳本使用
- Postman06-實例小結篇
- JMeter01-JMeter就是這么簡單
- JMeter02-一個完整實戰包你學會使用JMeter
- JMeter03-在JMeter中使用BeanShell編程
- JMeter04-圖形化和非圖形化運行JMeter
- JMeter05-生成美觀的HTML測試報告
- JMeter06-JMeter+Jenkins實戰
- JMeter07-解析session與cookie