Home >Backend Development >PHP Tutorial >Detailed explanation of the idea of ​​using PHP+fiddler to capture packets and collect the number of reading and likes of WeChat articles

Detailed explanation of the idea of ​​using PHP+fiddler to capture packets and collect the number of reading and likes of WeChat articles

coldplay.xixi
coldplay.xixiforward
2020-08-10 17:27:204334browse

Detailed explanation of the idea of ​​using PHP+fiddler to capture packets and collect the number of reading and likes of WeChat articles

##Introduction:

Analysis interface knows to get articles The number of reads and likes must have two key parameters: key and uin. Different public accounts have different keys (it is said that there is a universal WeChat key, but I don’t know how to get it). The key of the same public account will expire in about half an hour

Submit link to get article reading api

Related learning recommendations:

php programming (video)

Idea:

1. Intercept and forward the client's request for the reading interface to your own server, so that you can obtain the key and use __biz to associate the cache for half an hour

2. When submitting an article link for query, the server obtains __biz from the article link and checks whether the key corresponding to the current official account is cached. If yes, proceed to step 3. If not, proceed to step 4.

3.curl request https://mp.weixin.qq.com/mp/getappmsgext? interface to obtain data

4.When the key does not exist, notify the client to redirect to the url (The notification uses websocket notification or client-side ajax polling. You need to use a packet capture tool to modify the code of the article details page to jump to the middle page and wait for it. After opening the article page, it jumps back to the middle page every few seconds) and pause the program for a few seconds to wait for the customer. The client updates the key. At this time, the client submits the new key and uses it to query


Implementation

1. Capture packets

This interface is the interface for obtaining reading volume. The parameters are as shown below

2. Intercept and forward this interface to On your own server, click rules-customize rules Add the

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

effect to OnBeforeRequest (the function executed before the formal request), you can see that this interface has been forwarded

3. The server caches the key, and the code takes PHP as an example

 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. Submit the article link to query the API code

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. Notify the client Redirect page (this part is not written, please refer to my other articles about text sockets)

6. Use fiddler to modify WeChat articles and jsj scripts,

In OnBeforeResponse (before returning to the client) Execution method), plus the code to jump to the middle page

Effect

##Related learning recommendations:
Programming Video

The above is the detailed content of Detailed explanation of the idea of ​​using PHP+fiddler to capture packets and collect the number of reading and likes of WeChat articles. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:jb51.net. If there is any infringement, please contact admin@php.cn delete

Related articles

See more