Python入门自学进阶-Web框架——36、Web微信类实现初步

news2024/12/22 17:04:28

打开页面,会出现一个二维码,要使用手机微信扫一扫,才能登录。它的实现原理是什么?

下图为打开网页版微信登录的调试工具网络信息,定时发送请求,状态待处理(pending) 

上图的挂起是pending状态。

 长轮循就是服务器进程监听是否扫码并且在手机上点击确认这个消息,有了这个消息,就立刻返回消息给客户端,并跳转到登陆后的页面。

为何要有长轮询,因为网页协议是短链接,一次请求响应后,连接就断开了,当手机扫描二维码并确定登录后,后端修改了标志,但是无法发送给客户端,这就要求客户端定时发送请求,后台停住一段时间,就是为了避免过于频繁的客户端请求。

还要实现如下问题:

如何进行会话保持

如何获取用户列表

如何发送消息(接收消息)

一个额外的知识点:手机App获取后台数据,一般不是直接连接数据库,而是发送一个请求连接,否则,将用户名和密码写到APP中,直接连接数据库取数据,是很危险的。

当打开浏览器,输入wx.qq.com后,显示一个二维码,其html源码如下:

 就是一个img标签,即一张图片,其src="https://login.weixin.qq.com/qrcode/AbMEApebzQ==",关键就是最后的AbMEApebzQ==字符串,其他的都是固定的。那么在后端,应该是一个变量,每次动态获取一个字符串值。

通过谷歌浏览器的调试工具Devtools的网络,可以查到这个一个请求:

jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1687249873866

其响应内容为:

 其响应中带着这个随机字符串。

所以,先访问这个链接,获取随机字符串,然后在img标签中将src的值进行组装https://login.weixin.qq.com/qrcode/{0},{0}就用随机字符串代替。

整个起始过程:

第一步:发送
https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin
%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1687249873866

获得uuid,响应如下:window.QRLogin.code = 200; window.QRLogin.uuid = "QdZvsKCw2w==";

第二步:发送
https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=IfHUWaFFiA==&tip=1&r=669157799&_=1687252989011
获取二维码,img的src=https://login.weixin.qq.com/qrcode/{0},其中{0}用上一步的uuid替代
响应是:window.code=408;这时就是显示二维码,并挂起的状态

第三步:手机扫描二维码
此时 https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon= 返回的响应如下
window.code=201;window.userAvatar = 'data:img/jpg;base64,/9j/4AAQSkxxxxx......';
就是扫描人的头像,201是扫码未确认

下一步,是在手机上确认登录,然后在网页上跳转到登陆后的页面,显示好友等信息,但是在测试时,当前微信不提供网页版登录了。

 确认登录后,应该获取一个票据,记录了一些关键信息。

然后进行用户初始化,登录并获取最近联系人以及公众号,等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全|渗透测试入门案例分析,从零基础入门到精通—登录框页面的快速渗透常用检测手段

目录 引言 1、弱口令 2、万能密码绕过 ​编辑 3、登录认证绕过 3.1.令牌刷新端的错误配置 3.2. 错误的sso配置 3.3.CMS个例的访问问题 3.4.JWT Token的错误解析 3.5.暴力修改Authentication 4、图形验证码不失效 5、短信验证码不失效 6、短信攻击 7、反射型跨站脚…

【MySQL数据库】MySQL 高级SQL 语句二

MySQL 高级 SQL 语句二 一、连接查询1.1 inner join(内连接)1.2 left join (左连接)1.3 right join(右连接) 二、CREATE VIEW ---- 视图三、 UNION - - 连集3.1 UNION3.2 UNION ALL 四、交集值(取两个SQL语句结果的交集…

经典:商业智能BI解读,值得收藏

关注新闻的朋友们可能注意到了,最近这段时间关于数据要素、数字经济、数字化转型的相关行动越来越多,一方面是各级政府的政策规划以及大规模的发展行动,另一方面是则是各行各业的企业开始探寻数字经济,通过数字化转型进行改革&…

angular学习笔记

目录 1、认识Angular![在这里插入图片描述](https://img-blog.csdnimg.cn/17fe3ec067b64d75bf9d24a4e71403ed.png)2、路由2.1、路由懒加载2.2、路由守卫 3、模版指令4、生命周期4.1、父子生命周期 5、依赖注入6、RXJS7、自定义事件,自定义指令8、自定义管道9、获取d…

内网渗透(八十八)之委派攻击

委派 委派是大型网络中经常部署的应用模式,给多跳认证带来了很大的便利与此同时也带来了很大的安全隐患。利用委派,攻击者可结合其他漏洞进行组合攻击,导致攻击者可获取本地管理员权限甚至域管理员权限,还可以制作深度隐藏的后门。 委派是指将域内用户的权限委派给服务账…

【Adversarial Attack in Object Detection】物理对抗攻击和防御

目录 安全监控 **有无意义**无意义的补丁有意义的补丁 光学对抗攻击对抗灯干扰相机成像 攻击方法White-box attacksGradient-based attacks Optimization-based attacks Black-box attacksQuery-based attacksEvolution algorithm OUTLOOK 在计算机视觉中,根据实现…

征服Go世界,御剑江湖!学习路线与顶级资源一网打尽

引言 Go语言(也称为Golang)是一种开源的编程语言,由Google开发。它具有简洁的语法、高效的并发性能和良好的内存管理,因此在近年来迅速获得了广泛的关注和采用。本文将为您提供一条学习Go语言的路线图,并介绍一些优质…

二分查找 - 数据结构和算法教程

二分查找被定义为在排序数组中使用的一种搜索算法,它通过重复将搜索间隔分成两半来实现。二分查找的思想是利用数组被排序的信息,将时间复杂度降低到O(log N)。 在数据结构中应用二分查找的条件 数据结构必须排序。访问数据结构的…

mac为什么读取不了NTFS格式硬盘,Tuxera NTFS for Mac 2022 读写ntfs移动硬盘插件

使用 Mac 的巨大痛点之一:移动硬盘只能打开文件,但是无法写入新的资料。有人说格式化硬盘,改成苹果的 macOS扩展格式,但是原先硬盘的数据要转移,而且拿到 Windows 系统里无法被识别。 有人说格式化硬盘,改…

关于nginx,正向代理和反向代理是什么意思

为什么要使用nginx 很多公司会用到nginx做代理服务器,为什么用nginx,tomcat服务器不行吗? tomcat缺点:并发量小,用户使用的少 nginx:高并发,高性能,cpu、内存等资源消耗却非常低&…

在 Navicat Premium 中管理 MySQL 用户 | 第 4 部分:权限管理员工具

第 4 部分:权限管理员工具 在本系列中,我们一直在探索如何使用 Navicat 的旗舰产品 Navicat Premium 执行常见的用户管理任务。在上一篇文章中,我们研究了新用户对象选项卡的“服务器权限”、“权限”和“SQL预览”选项卡。 在上一篇文章中…

前程无忧guid、acw_sc__v2

文章目录 声明目标网站acw_sc__v2分析python调用测试话外拓展-风控浅析往期逆向文章推荐 声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除&#x…

【测试】Selenium操作Cookie

1.操作Cookie 操作Cookie无非就是读取和删除Cookie,下面这些是主要方法 from selenium.webdriver import Chrome, ChromeOptions from selenium.webdriver.chrome.service import Serviceoptions ChromeOptions() options.add_argument("--ignore-certifica…

07-source-map

source-map是从已转换的代码,映射到原始的源文件。使浏览器可以重构原始源并在调试器中显示重建的原始源。 根据源文件,生成source-map文件,webpack在打包时,可以通过配置生成source-map; 在转换后的代码,…

Springboot整合mybatisplus实战

Springboot整合mybatisplus,纯后端,验证结果是通过postman调用的,记录一下 1、建表语句以及初始化数据脚本 CREATE TABLE tbl_book (id int NOT NULL AUTO_INCREMENT,type varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT…

Django之模板层

一、模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图进行处理,而视图在经过一系列处理后必须要有返回信息给浏览器。如果我们要返回html标签、css等数据给浏览器进行渲染,我们可以在视图中这么做 from django.s…

Git进阶系列 | 3. 基于Pull Request实现更好的协作

Git是最流行的代码版本控制系统,这一系列文章介绍了一些Git的高阶使用方式,从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章,这是第3篇。原文:Better Collaboration With Pull Requests[1] 本文是“Git进阶系列”的第三篇…

Keil 重定向 fputc 函数 以及 printf 函数的代码尺寸测试

本文的开发环境为 Keil Cortex-M3 内核处理器。 重定向 fputc 函数方法 如果想使用库函数 printf ,必须要将 fputc 重定向到自己的串口上。 术语 重定向 可以理解为用户重写 fputc 函数,在重写的函数体内调用自己硬件的串口发送函数。 在 Keil 环境中…

Android Binder通信原理(二):servicemanager启动

源码基于:Android R 0. 前言 下图是android 8.0 之前binder 的软件框架,依赖的驱动设备是/dev/binder,binder机制的四要素分别是client、server、servicemanager和binder驱动。 对于android 8.0后的binder 和vndbinder依然同这个框架&#…

【Python版】手把手带你如何进行Mock测试

什么是mock? mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock? 之所以使用mock测试,是因为真…