用Python模拟登录淘宝。废话不多说。
开心的开始吧~
开发工具Python版本: 3.6.4
相关模块:
Re模块
操作系统模块
请求模块;
以及Python自带的一些模块。
环境搭建安装Python并将其添加到环境变量中。pip可以安装所需的相关模块。
登录流程分析先给家里看看淘宝登录请求的时序图,让大家看得懂。
注:淘宝ua参数:ua(用户代理)命名为用户代理。淘宝ua参数增加了浏览器、ip、电脑、时间等信息。然后加密生成,用在很多地方,不仅仅是登录!
在代码层面,考虑将模拟登录淘宝分为以下四个步骤:
目前我们登录淘宝,大多数情况下都是没有滑块验证码的。经过多次尝试登录注销,中间只发生过一次。那么是什么在控制滑块验证码是否需要呢?
从上图可以看出,输入用户名时,浏览器会发起post请求,验证是否需要出现滑块验证码。如果返回true,就会出现滑块验证码!否则不会出现,一般不会出现!在图中我们可以看到这个post请求上传了两个参数:username和ua!我说过,ua是浏览器、ip、设备信息等多信息加密参数。,所以猜测淘宝的验证码是不是不仅从账号角度出现,还会从ip、设备等角度出现!
例如,一个设备可能登录了大量帐户。这时候淘宝可以从ua参数中获取设备号,然后对设备进行限制!
知道了流程和请求的链接和参数,就可以用代码来请求了!
这一步也是上述顺序图图的第五步:请求登录。在这里,用户名、ua参数、加密密码等30多个参数会被张贴到淘宝(taobao.com)进行验证。
让我们用代码实现它。有很多参数。不要害怕。都是从浏览器复制过来的!
请求结果
可以看到申请st码的链接后面有一个令牌。
3.申请st码我们已经申请了淘宝(taobao.com)的token,这一步就是用token换取st码。这里很多人可能会有疑问:淘宝登录为什么要这么麻烦?你不能直接在taobao.com登陆吗?为什么需要先在淘宝验证用户名和密码,再去Alibaba.com兑换st码登录?任何公司的框架都是逐渐演变的结果,我猜最初的淘宝登录肯定没那么复杂。但是随着阿里巴巴的逐渐壮大,很多业务线是分的,但是这些业务线是有联系的。比如用户登录淘宝账号后,天猫不需要再次登录(注意淘宝和天猫的顶级域不同,cookis不能共享)。为了实现这个功能,出现了单点登录。
单点登录(SSO)是企业业务集成最流行的解决方案之一。单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。——百度百科
很多大企业几乎都是做单点登录的,所以阿里的单点登录系统必须是母公司阿里巴巴(alibaba.com)来做,所有子公司调用母公司接口!我们再来分析一下为什么淘宝登录这么复杂。很好理解:用户数据在淘宝,所以淘宝(taobao.com)现在需要验证用户名和密码。验证后生成令牌,浏览器拿着令牌向阿里巴巴(alibaba.com)申请单点登录码(st码),阿里巴巴收到验证令牌的请求后返回st码,所以用st码替换令牌的原因是单点登录!理解了设计原理之后,代码的实现就很清晰了!
成功获取st码后,就可以登录了。这一步是通过st代码获取登录cookies。
这里我们已经成功登录淘宝了!
5.获取淘宝昵称事实上,我们已经成功登录淘宝,并将链接返回到用户主页。为了进一步验证登录成功,我们会请求淘宝用户首页,顺便提取淘宝的昵称!
作者:戴
链接: