Home > Article > Backend Development > 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 hourSubmit 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 hour2. 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 theif (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 pageEffect ##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!