概述
这次分析的百度统计登录接口,算是这几个中最简单的了。
但是学到了一个新东西,叫做js模板,搞web的同学应该知道,我这种web半吊子第一次见,非常有意思。
工具:
1 | 1. chrome/firefox |
登录接口
打开百度统计首页https://tongji.baidu.com/web/welcome/login
,点开登录框,f12。尝试输入之后,查看发送的数据。
1 | Request URL:https://cas.baidu.com/?action=login |
除了上面注释的需要输入的三个字段,其他字段意义都不明确,偷点懒,多次尝试后发现其他字段不会变化,那么就用固定值了。
点击验证码,看到网络,拿到获取验证码的请求,key使用10位时间戳。
1 | GET https://cas.baidu.com/?action=image&key=1503151305 |
所以登录接口就出来了,vcode
需要人工输入。
1 | url = 'https://cas.baidu.com/?action=image&key=' + time_stamp(10) |
接着看看登录返回状态,如果失败了,返回数据中包含如下数据:
1 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
然后浏览器加载该url,显示错误提示信息
1 | Request URL:https://tongji.baidu.com/web/welcome/login?fromu=https%3A%2F%2Ftongji.baidu.com%2Fweb%2Fwelcome%2Floginback&e=%E7%94%A8%E6%88%B7%E5%90%8D%E5%AF%86%E7%A0%81%E9%94%99%E8%AF%AF&un=anhkgg&aid=12&errno=132 |
其中e
是错误提示信息,errno是错误号。
登录成功返回数据如下,没有e
错误信息。
1 | <script> |
那么就可以先通过正则拿到url,通过搜索url是否有e
判断是否登录成功,并且拿到提示信息。成功则继续访问该url跳转到成功页面,获取其他需要的信息。
1 | pattern = re.compile(r'var url="(.*?)";') |
js模板
这里比较意思的是使用的js模板来生成登录表单。
具体js模板使用看这里。
1 | <script id="LoginTemplate" type="text/template"> |
从上面代码中可以看到,某些标签的值使用了#{this.xxx}
这样的语法,不是直接填入的具体内容,更加灵活,扩展更容易。
然后在点击登录按钮之后,通过函数格式化一个全局定义的变量来生成的登录表单。具体如下:
1 | //全局数据,用于替换表单中的this.xxx |
然后在login.js中,通过下面的函数来初始化表单,并且显示。
其中n.format("LoginTemplate", VAR)
用于格式化VAR定义的数据到表单的数据中。
1 | , h = function() { |
而在format具体如何替换的,就随意实现了,这里就不在具体分析,有兴趣跟着分析的同学可以去看看common.js中的代码。
总结
百度统计接口非常简单,密码未做变换,使用https。
登录之后具体做什么也不在分析。
预告下次做百度主站的登录分析,简单看了下,非常…复杂!
安利一下公众号:汉客儿
转载请注明出处,博客原文:https://anhkgg.github.io/pylogin-baidutongji-login-analyze/