栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pylogin系列之搞定百度统计

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pylogin系列之搞定百度统计

概述

这次分析的百度统计登录接口,算是这几个中最简单的了。

但是学到了一个新东西,叫做js模板,搞web的同学应该知道,我这种web半吊子第一次见,非常有意思。

工具:

1. chrome/firefox
2. f12,network
3. python:requests、re
登录接口

打开百度统计首页https://tongji.baidu.com/web/welcome/login,点开登录框,f12。尝试输入之后,查看发送的数据。

Request URL:https://cas.baidu.com/?action=loginRequest Method:POST
Status Code:200 OK

appscope[]:6appscope[]:7appscope[]:12appid:12entered_login:anhkgg //名字entered_password:1111111111111111 //密码entered_imagecode:9mxm //验证码charset:utf-8fromu:https://tongji.baidu.com/web/welcome/loginbackselfu:https://tongji.baidu.com/web/welcome/loginsenderr:1

除了上面注释的需要输入的三个字段,其他字段意义都不明确,偷点懒,多次尝试后发现其他字段不会变化,那么就用固定值了。

点击验证码,看到网络,拿到获取验证码的请求,key使用10位时间戳。

GET https://cas.baidu.com/?action=image&key=1503151305

所以登录接口就出来了,vcode需要人工输入。

url = 'https://cas.baidu.com/?action=image&key=' + time_stamp(10)
r = self.s.get(url)

payload = {    'appscope[]':6,    'appscope[]':7,    'appscope[]':12,    'appid':12,    'entered_login':name,    'entered_password':pwd,    'entered_imagecode':vcode,    'charset':'utf-8',    'fromu':'https://tongji.baidu.com/web/welcome/loginback',    'selfu':'https://tongji.baidu.com/web/welcome/login',    'senderr':1,
    }        
url = 'https://cas.baidu.com/?action=login'r = self.s.post(url, data = payload)

接着看看登录返回状态,如果失败了,返回数据中包含如下数据:

正在处理...
    

然后浏览器加载该url,显示错误提示信息

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=132Request Method:GETfromu:https://tongji.baidu.com/web/welcome/loginbacke:用户名密码错误un:anhkggaid:12errno:132

其中e是错误提示信息,errno是错误号。

登录成功返回数据如下,没有e错误信息。

那么就可以先通过正则拿到url,通过搜索url是否有e判断是否登录成功,并且拿到提示信息。成功则继续访问该url跳转到成功页面,获取其他需要的信息。

pattern = re.compile(r'var url="(.*?)";')
cont = re.search(pattern, r.content)
url = cont.group(1)
pattern = re.compile(r'e=(.*?)&un=')
cont = re.search(pattern, url)if cont != None:
    r = urllib.unquote(cont.group(1)) #失败
    return utf2gbk(r)        

r = self.s.get(url) # 成功
js模板

这里比较意思的是使用的js模板来生成登录表单。

具体js模板使用看这里。

从上面代码中可以看到,某些标签的值使用了#{this.xxx}这样的语法,不是直接填入的具体内容,更加灵活,扩展更容易。

然后在点击登录按钮之后,通过函数格式化一个全局定义的变量来生成的登录表单。具体如下:

//全局数据,用于替换表单中的this.xxx

然后在login.js中,通过下面的函数来初始化表单,并且显示。

其中n.format("LoginTemplate", VAR)用于格式化VAR定义的数据到表单的数据中。

, h = function() {    var e = t(".login-trigger").eq(0);
    e.on("click", function() {
        s || (s = new i({
            width: 345,
            isModal: !0,
            titleText: "",
            isSingle: !0,
            content: n.format("LoginTemplate", VAR) //初始化登录表单数据
        }),
        loginController.init()),
        s.show()
    });

而在format具体如何替换的,就随意实现了,这里就不在具体分析,有兴趣跟着分析的同学可以去看看common.js中的代码。

总结

百度统计接口非常简单,密码未做变换,使用https。

登录之后具体做什么也不在分析。

预告下次做百度主站的登录分析,简单看了下,非常...复杂!



作者:anhkgg
链接:https://www.jianshu.com/p/e1f35c0dc66a


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/224201.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号