PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解


Posted in PHP onDecember 20, 2019

简介:

分析接口知道要获取文章阅读数和点赞数必须有key和uin这两个关键参数,不同公众号key不一样(据说有万能微信key,不懂怎么搞到),同一个公众号key大概半小时会过期

提交链接获取文章阅读量api

思路:

1.将客户端请求阅读量接口的请求拦截转发到自己服务器,这样就可以获取到key ,用__biz关联缓存半小时

2.提交文章链接进行查询时,服务器从文章链接里获取__biz,查询是否缓存了当前公众号对应的key,有的话进行第3步,没有进行第4步。

3.curl请求https://mp.weixin.qq.com/mp/getappmsgext? 接口获取数据

4.key不存在时,通知客户端重定向到该url(通知用websocket通知或者客户端ajax轮询,需要用抓包工具修改文章详情页代码让其跳转到中间页面待命,打开文章页面后隔几秒跳回中间页)并暂停程序几秒等待客户端更新key,此时客户端提交了新的key,用其进行查询

实现

1.抓包

此接口就是获取阅读量的接口,参数如下图

PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解

PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解

2.将此接口拦截转发到自己服务器,点击 rules- customize rules  在OnBeforeRequest(正式请求之前执行的函数)加上

if (oSession.fullUrl.Contains("mp.weixin.qq.com/mp/getappmsgext"))
 {
  oSession.oRequest["Host"]= 'ccc.aaa.com' ;
 }

PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解

效果,可以看到此接口已经被转发

PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解

3.服务端缓存key,代码以PHP为例

public function saveKey(Request $request)
  {
    $__biz = $request->param('__biz',0);
    $data['uin'] = $request->param('uin',0);
    $data['key'] = $request->param('key',0);
    Cache::set($__biz,$data,30 * 60);
    return 'ok';
  }

4.提交文章链接查询API代码

public function getReadNum(Request $request)
  {
    $url = $request->param('url');
    parse_str(parse_url($url)['query'], $param);
    $__biz = $param['__biz'];
    $key_data = Cache::get($__biz);
    if (empty($key_data))
      return 'no key';
    $uin = $key_data['uin'];
    $key = $key_data['key'];
    $param['uin'] = $uin;
    $param['key'] = $key;
    $param['wxtoken'] = "777";
    $wechat_url = "https://mp.weixin.qq.com/mp/getappmsgext?" . http_build_query($param);
    //dump($wechat_url);
    $data = array(
      'is_only_read' => 1,
      'is_temp_url' => 0,
      'appmsg_type' => 9,
    );
    $res = $this->get_url($wechat_url,$data);
    return $res;
  }
function get_url($url,$data)
  {
    $ifpost = 1;//是否post请求
    $datafields = $data;//post数据
    $cookiefile = '';//cookie文件
    $cookie = '';//cookie变量
    $v = false;
 
    //模拟http请求header头
    $header = array("Connection: Keep-Alive","Accept: text/html, application/xhtml+xml, */*", "Pragma: no-cache", "Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3","User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat");
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, $v);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $ifpost && curl_setopt($ch, CURLOPT_POST, $ifpost);
    $ifpost && curl_setopt($ch, CURLOPT_POSTFIELDS, $datafields);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $cookie && curl_setopt($ch, CURLOPT_COOKIE, $cookie);//发送cookie变量
    $cookiefile && curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);//发送cookie文件
    $cookiefile && curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);//写入cookie到文件
    curl_setopt($ch,CURLOPT_TIMEOUT,60); //允许执行的最长秒数
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $ok = curl_exec($ch);
    curl_close($ch);
    unset($ch);
    return $ok;
  }

5.通知客户端重定向页面(这部分没写,看参考我的其他关于文本socket文章)

6.用fiddler修改微信文章也jsj脚本,

在OnBeforeResponse(返回给客户端之前执行的方法),加上跳转到中间页的代码

效果

PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解

总结

以上所述是小编给大家介绍的PHP+fiddler抓包采集微信文章阅读数点赞数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
随机头像PHP版
Oct 09 PHP
php中将字符串转为HTML的实体引用的一个类
Feb 03 PHP
QQ互联一键登录审核不通过的解决方案
Sep 10 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
PHP中生成UUID自定义函数分享
Jun 10 PHP
win7安装php框架Yii的方法
Jan 25 PHP
微信支付扫码支付php版
Jul 22 PHP
golang与PHP输出excel示例
Jul 22 PHP
php 自定义错误日志实例详解
Nov 12 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
laravel5 Eloquent 实现事务方式
Oct 21 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 #PHP
Laravel框架处理用户的请求操作详解
Dec 20 #PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 #PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 #PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 #PHP
PHP中用Trait封装单例模式的实现
Dec 18 #PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 #PHP
You might like
利用js调用后台php进行数据处理原码
2006/10/09 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python类的动态修改的实例方法
2017/03/24 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
Linux面试题LINUX系统类
2015/11/25 面试题
PyQt 如何创建自定义QWidget
2021/03/24 Python
大专毕业生自我鉴定
2013/11/21 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书