抓包的工具有很多,浏览器的开发者工具、Fiddler、Wireshark等等,这里以Chrome的开发者工具举例。
删除Cookies
方便分析,我们先打开开发者工具,将博客园的cookie删除
登录页Cookie
博客园的登录页面是https://passport.cnblogs.com/user/signin,直接访问这个页面,然后看网络请求
可以看到先访问了https://passport.cnblogs.com/user/signin,状态码是302,又重定向到https://passport.cnblogs.com/user/signin?AspxAutoDetectCookieSupport=1,还是这个页面,只是多加了参数AspxAutoDetectCookieSupport=1
,分别看这两个请求的返回内容
访问第一个请求时服务器向浏览器返回了 AspxAutoDetectCookieSupport
和 SERVERID
两个Cookie,而第二个请求,也是返回了 SERVERID
这个Cookie,暂时认为这个请求对我们没有帮助
登录请求
输入账号密码,然后点登录,看请求的报文
有几个需要注意的地方
-
Content-Type
使用了application/json的方式 - 登录页返回的两个Cookie要带上
- 有个
VerificationToken
头 - 账号密码的参数分别是
input1
和input2
,并且做了加密处理,remember
是记住密码 - 实践发现
X-Requested-With
也是必须的,否则登录报错
要知道VerificationToken
和input1
、input2
值的由来,我们定位到登录按钮的事件
调用了signin_go
函数,找到这个函数,看它所做的事情
代码很清晰,到这里,除去验证码的部分,结合请求报文,登录的过程已经很清楚了
- GET请求https://passport.cnblogs.com/user/signin页面,拿到
AspxAutoDetectCookieSupport
和SERVERID
两个Cookie - 使用了 JSEncrypt 根据RSA公钥加密用户名与密码作为
input1
、input2
参数 - 设置请求头
ContentType
和VerificationToken
还有X-Requested-With
,并带上前面两个Cookie - 将
input1
、input2
、remember
转换为json,发送POST请求,返回的JSON数据success为true表示登录成功 - 登录成功后返回
.CNBlogsCookie
Cookie,也就是用户身份的Cookie
模拟登录
为了验证我们的分析,使用Postman工具模拟一下登录的过程
设置4个必要的请求头
因为Content-Type是application/json方式,所以表单使用raw
,填入登录的json参数
然后提交,返回了登录成功的JSON