知乎模拟登陆

知乎模拟登陆

既然要模拟登陆知乎,那么我们就首先要知道登陆请求是发给谁的。
在知乎密码登录界面,打开开发者工具的Network,然后输入账号和错误的密码,我们可以看到它都发送了哪些请求。在这里插入图片描述
看到它有一个请求发送给了sign_in,看一下它的response在这里插入图片描述
是它没错了,接下来分析一下这个请求。这是一个post请求,一般post请求都会带一个formdata在这里插入图片描述
很好,这个参数我们看不懂,肯定是做加密处理了,那我们现在就需要找到它的加密逻辑然后模拟出这个参数。
现在已知就只有这个sign_in,那就全局搜索一下sign_in在这里插入图片描述
只有这么一个js文件里有sign_in,点进去看看再搜索一下sign_in在这里插入图片描述
发现这段代码里的endpoint跟我们的请求路径很像,在return的地方打上断点再看看在这里插入图片描述
看一下传过来的e,里面有我们登录的账号、密码、验证码的数据,还有一些其他的数据,这个对象很大可能我们需要用到它。从这行开始单步执行,一直执行一直执行。。。(这是一个漫长的过程,你也可以全局搜索与加密相关的单词)。通过不懈的努力,我们终于找到了我们想要的东西
这个返回值与formdata的值很像,应该是他没错了!再看一下这个e,这不就是之前看到的对象给拼接成字符串了么!加密的函数找到了,我们只需要跳进去看它是如何加密的就可以了。目前为止加密的逻辑找到了,也知道它给谁加密了,现在就需要去构造被加密的对象了。
回过头来再去分析参数e,多发几次请求后发现,会动态发生变化只有signature和timestamp。后者是时间戳,构造出来很简单。主要要知道signature是如何构造的。先全局搜索signature在这里插入图片描述
在这个文件中有在这里插入图片描述
这么一段代码,看到SHA-1,知道signature它应该是用安全散列算法来进行加密的。有两种方法可以拿到signature:第一种使用python的hashlib库里的sha1模拟;第二种跳到js代码里找到逻辑代码然后使用python的execjs库执行js代码。这里我使用的第一种在这里插入图片描述
看一下结果:在这里插入图片描述
第一个是signature,第二个是时间戳。
signature和时间戳的问题解决了,现在来解决验证码的问题。知乎的验证码有两种:第一种是数字字母组合的验证码,它的lang为en;第二种是字体验证码,它的lang为cn。这里验证码识别我们就人眼识别就可以了。
来重新看一下知乎登录的所有请求在这里插入图片描述
可以看到它发送登录请求之前先去请求了验证码。先发送一个get请求看是否有验证码在这里插入图片描述
这里如果为false就没有验证码。当这里为true的是时候,又发送一个put请求返回验证码的base64的格式在这里插入图片描述
拿到这个字符串之后用python的base64库对它进行解码并保存为图片的格式,这样我们就拿到了验证码图片。拿到验证码之后我们还要发送一个post请求去验证验证码对不对,
第一种验证码的参数在这里插入图片描述
第二种验证码的参数在这里插入图片描述
返回的数据在这里插入图片描述
这里如果为false的话需要重新请求验证码。
现在我们就拿到了我们所有需要的数据,现在要构造一个字符串然后拿去加密得到formdata。把加密逻辑的代码拿到Python中用execjs库执行。在执行的时候会遇到几个问题。execjs会用你电脑里的环境来执行js代码,最好用Nodejs。换了环境之后需要代码换成nodejs认识的代码,把window换成global。然后来执行以下代码在这里插入图片描述
报错了,说atob没有定义,因为nodejs中没有这个函数,所以需要把它换成Buffer.tostring()在这里插入图片描述
我们成功地拿到了formdata!在这里插入图片描述
现在我们马上就要成功了!剩下的就是发送请求了。请求头中必须有在这里插入图片描述这三个。
如果少’x-zse-83’会返回:在这里插入图片描述
如果少’content-type’会返回:
在这里插入图片描述
请求头中还有一个必须的键是’x-xsrftoken’,这个值在’set-cookie’中,是动态的,需要在第一次发请求的时候拿到cookie,然后更新请求头就好了。

至此为止就没有其它的坑了,能够成功登陆知乎。在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值