[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判断处理,当没有统计数据返回时,提醒用户重新打开微信文章,生成新的统计请求。
![](https://box.kancloud.cn/6299d646b19484f0f493d778c47f36e4_1519x793.png)
统计结果如下:
![](https://box.kancloud.cn/750ec8061c8d8fca9fcbb64aebc55856_1030x230.png)
<hr style="margin-top:100px">
:-: ![](https://box.kancloud.cn/331f659e8e6cddb0d9f182e00e32803f_258x258.jpg)
***微信扫一扫,关注“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