今天心血来潮,看了一下微信扫码登陆.这里记录一下,重申一下–做事需要耐心!!!
微信公众号官网:mp.
我们需要分析的是二维码图片如何拿到了,当然,强大的f12绝对可以,
拿到二维码后发现是一个可访问地址:https://mp./cgi-bin/scanloginqrcode?action=getqrcode&random=1632554160456
在新的浏览器打开,噢居然没有展示? 那么继续分析有显示的是为什么呢? 在访问过程中可以在同浏览器可以打开,在不同浏览器打不开,这可以排除token等,说明是cookie,扒开请求头的外衣,cookie分别为:ua_id,uuid,那么是不是很简单呢,逐个寻找请求吧!
这里直接说在哪吧,不废话了,找东西的方法很简单,
步骤1访问首页:
从进入https://mp./页面那一刻,请求这个地址时候可以获得ua_id;
步骤2开始登录:
从开始登录请求:https://mp./cgi-bin/bizlogin?action=startlogin中获取uuid;
这里说一下微信的推测逻辑哈:
访问首页:获取ua_id,
拿着ua_id校验会话权限:https://mp./webpoc/cgi/chat/checkChatPermission?type=15&grayType=random&token=&lang=zh_CN&f=json&ajax=1,如果返回false,请求头会带回来wxuin的cookie,再次校验,
bizlogin进行预登陆:https://mp./cgi-bin/bizlogin,预登陆返回成功,进行接下来开始登录
startlogin 开始登陆:https://mp./cgi-bin/bizlogin?action=startlogin,开始登陆后返回uuid,
这时,获取二维码:https://mp./cgi-bin/scanloginqrcode?action=getqrcode&random=1632554160456
接下来,坚挺登陆状态:https://mp./cgi-bin/scanloginqrcode?action=ask&token=&lang=zh_CN&f=json&ajax=1,从status判断状态(这里不罗列状态了,简单说一下,有6中),
最后,下次再说,提示一下bizlogin设置cookie,注意loginhook,从redirect_url中获取token,
贴代码给你示范一下,以下为nodejs代码
/*** 步骤1,看代码不多说*/async function getHtml() {const indexHtmlResp = await axios.get('https://mp./', {headers: {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}});let cookieArr = indexHtmlResp.headers['set-cookie'];console.log(cookieArr[0].split(';')[0]);//主要获取 ua_idreturn cookieArr[0].split(';')[0];}//第二步:async function startLogin(uaid) {let url = 'https://mp./cgi-bin/bizlogin?action=startlogin';const resp = await axios.post(url, {userlang: 'zh_CN',redirect_url: '',login_type: 3,sessionid: +new Date + "" + Math.floor(100 * Math.random()),token: '',lang: 'zh_CN',f: 'json',ajax: 1}, {headers: {'content-length':99,'origin':'https://mp.','content-type':'application/x-www-form-urlencoded; charset=UTF-8','referer': 'https://mp./','user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36','cookie': uaid},transformRequest: [function (data) {let ret = ''for (let it in data) {ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'}ret = ret.substring(0, ret.lastIndexOf('&'));return ret}],});//获取uuidconsole.log(resp.data);console.log(resp.headers['set-cookie'][0].split(';')[0]);return resp.headers['set-cookie'][0].split(';')[0];}function refreshQrcode() {// this.getQrcode();let qrcodeSrc = 'https://mp.' + "/cgi-bin/scanloginqrcode?action=getqrcode&random=".concat(+new Date);console.log('访问图片地址:',qrcodeSrc)}//汇总async function test() {//get uaidlet uaid = await getHtml();//get wxuin// let wxuin = await checkChatPermission(uaid);//preLogin//await bizLogin(uaid);//start loginlet uuid = await startLogin(uaid);//get qrcodeSrcrefreshQrcode()console.log("cookie:==>",uaid+';'+uuid);//qrcodeSrc need cookie// console.log(uaid + ';' + wxuin + ';' + uuid);}//执行代码test()
如果觉得《随便记录一下:微信公众号后台管理系统 获取需要扫描的二维码》对你有帮助,请点赞、收藏,并留下你的观点哦!