为啥要写这一篇文章呢?
(主要是qq群内有人在模拟登录知乎,一直不成功)而后我抓包看了下,发现知乎登录页已经改版了,并且难度大大提升了。css
首先内,仍是打开知乎首页,而后输入帐号密码,登录(记得输错密码)python
这样咱们就能够看到请求头了(请求头以下) chrome
咱们发现有这几个请求头和正常的不同(红色框中的)浏览器
authorization
(感受应该是js生成的,后面再看Content-Type
(后面多了boundary=xxx 这种,那这种是啥意思呢,后面和请求参数一块儿看cookie
:这个要注意,登录前cookie就不为空,说明以前确定有set-cookie的操做x-udid,x-sxrftoken
这两个都是验证参数,估计都在网页源代码能找到再看一下请求参数bash
能够看到参数是以payload的形式出现的微信
第一次看到这种的人估计会一脸懵逼cookie
这个要结合请求中的session
Content-Type:
multipart/form-data; boundary=----WebKitFormBoundary2KNsyxgtG28t93VF
复制代码
来一块儿看python爬虫
multipart/form-data
是一种表单提交的方式,后面的boundary=xxx 是表单分割的方式,那到底啥意思呢?看一个简单的小列子你就能明白啦加密
------WebKitFormBoundary2KNsyxgtG28t93VF
是分割不一样参数的,因此能够直接不看他(这个是由上面的Content-Type后面的boundary决定的,能够随便修改)
那把分割线去掉后,上面的就至关于 client_id=c3cef7c66a1843f8b3a9e6a1e3160e20
,
grant_type=password
.
那么这个payload就很好理解了.
咱们来看一下,一共有哪些参数
参数还挺多的,能够看到不少参数都是固定的,如帐号,密码,时间戳,等等
变更的有两个 client_id,signature
authorization
:
咱们在chrome内,直接按ctrl+shift+f(全局搜索,搜索js,css这些),能够看到已经搜索到了,而且是直接写在js里面的,而后从新随便换个帐号再抓一次包,发现authorization 的值仍是固定的,因此说明authorization 是直接写在js里面的,不是动态修改的(那么authorization 的值咱们就已经找到了)
cookie
:
在登录以前,就发现cookie的值不为空,说明确定打开网页后就有set-cookie的操做了,咱们想验证的话,先打开一个无痕浏览器(主要是为了把以前的cookie所有清空,避免干扰),而后打开zhihu.com,咱们发现他有几回set-cookie的动做
那咱们想要模拟的话,很简单的方法是直接使用requests.session
x-udid,x-sxrftoken
:
通常这种验证参数都会在网页源代码里面,因此直接查看网页源代码
能够看到已经找到了,后续就是如何把这个找出来而已,可使用正则,或者xpath定位到
client_id
:
你会发现client_id与上面的authorization 如出一辙
signature
:
仍是使用ctrl+shift+f 全局搜索
发现找到了,可是参数是js动态生成的...
主要是找到如何加密的,而后使用Python模拟出来
第一步:下载这个js,格式化(让代码好看一些)
第二步:使用fiddle替换掉原来的js,使用刚刚格式化的js
第三步:慢慢调试。。。直到找到如何生成的...
大概步骤是这样
可是假如你js像我同样很渣的话,你能够直接找到这段加密的js,而后Python执行这段js就能够了。。。
代码请关注微信公众号【python爬虫分享】,发送“知乎登录代码”可见~~~