python实战 您所在的位置:网站首页 怎么扫描二维码登录微信号 python实战

python实战

2024-07-18 08:23| 来源: 网络整理| 查看: 265

在前文中,我们讲解了企业内网中常用的CAS登陆流程,并给出了用python实现的案例。然而,在互联网环境下,相对更方便、快捷、灵活的扫码登录方式才是主流。本文中,我们就详细来讲解一下扫码登陆的流程,并给出一个实际的案例来加深理解。在前文中,我们讲解了企业内网中常用的CAS登陆流程,并给出了用python实现的案例。然而,在互联网环境下,相对更方便、快捷、灵活的扫码登录方式才是主流。本文中,我们就详细来讲解一下扫码登陆的流程,并给出一个实际的案例来加深理解。

原理分析

扫码登陆的实现上,各家的细节不尽相同,但是基本的流程是类似的,大致如下:

访问网站扫码登陆页,网站给浏览器返回一个二维码和一个唯一标识KEY浏览器开启定时轮询服务器,确认KEY对应的扫码结果用户使用app扫码二维码,app获取KEY并告知服务器已扫码App确认登陆(包含个性化校验过程),服务器更新KEY的校验结果浏览器轮询结果成功,获得一次性token

带上token请求资源,获得有效cookie,正常访问资源。

网络分析

下面我们以JD的网站扫码登陆流程为例,进行网络交互分析,为后面的编码实现奠定基础。老规矩,浏览器打开F12开发者工具,访问登陆界面。很容易的在网络协议包中找到请求返回二维码的Get请求。如下图所示,响应正文中正是我们期望返回的二维码图像。

从图中可以看到请求的URL地址,并带了三个参数appid,size,t,前两个应该是固定值,第三个根据值的位数和开头1614也很容易猜到是时间戳。

浏览器返回的唯一标识KEY怎么判断是哪个呢,后面会进行反推,现在先继续往后看,查看浏览器发出的定时轮询包的格式。从包中可以看到,除了常规的字段外,还送了一个token字段,且每次GET请求的token字段是一样的,这个token应该就是网站给浏览器返回的唯一标识KEY了。

我们再回过头来仔细去看之前获取二维码的GET请求应答数据,可以在应答标头中找到这个token的值。如下图所示:

相当于这个唯一KEY放置在cookie中,我们编码实现的时候从cookie里取即可。

然后用APP扫码,分析出在未完成扫码、完成扫码未确认登陆、完成登陆三种场景下,网站分别返回的信息。如下图所示,从图中可以看出,提示内容还是非常明确的。在完成登陆的场景下,网站返回了一个ticket值,我们继续往后看浏览器是怎么应用这个ticket数据的。

从下图中可以看到,浏览器访问了一个验证ticket的地址,并通过参数t带上了ticket的值。在响应正文中,通过returnCode可以得知ticket校验成功。至此,一个扫码登陆的流程就结束了。

编码实现

获取二维码的实现如下所示,其中time.time() 可以返回当前时间的时间戳(1970纪元后经过的浮点秒数),由于整数位只有10位,而分析的包中时间戳是13位的,故乘以1000,将三位毫秒时间也纳入进来。

如下图所示,打开二维码图片文件等待app扫码过程中,程序每隔2s循环100次轮询扫码结果,等到返回结果为200时,保存ticket的值,并作为参数去服务器校验有效性,校验通过后,服务器会设置cookie有效,我们可以把cookie保存下来,下次就可以直接访问资源网站了。

本文通过一个实例,逐步分析并实现了利用Python进行扫码登录的示例。大家进一步实践加深理解。由于篇幅所限,需要完整示例代码的可以https://download.csdn.net/download/zhutou_xu/15499968 免费下载,有疑问的也欢迎在评论区留言交流。后续将推出更多python实战分享,喜欢的就点赞关注我吧。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有