js生成其他登陆参数
同样使用fiddler抓包,找到登陆那个请求:
可以看到这个请求参数中有一个LoginKey的参数,然后先按照LoginKey的值全局搜索,结果没找到,于是按照LoginKey为关键字搜索找到好几个:
最后一个是登陆请求,于是查看其他几个,发现基本都是js文件,就想到是js生成的,经过研究发现比较简单:
上图是一个文件,方便观察,LoginKey是guid()生成的,而guid函数调用了s4(),s4里是一些随机数,如果不清楚是什么可以在浏览器开发调试工具里试试;
于是按照这个逻辑使用python实现:
def k_4(self): k = [str(hex(i))[-1] for i in range(0, 16)] return ''.join(random.sample(k, 4)) def get_login_key(self): return '-'.join([self.k_4()+self.k_4(), self.k_4(), self.k_4(), self.k_4(), self.k_4()+self.k_4()+self.k_4()])
至此可以实现登陆:
self.session = self.gen_session() self.login_key = self.get_login_key() headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.8", "Connection": "keep-alive", "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0", } dataform = '{"LoginKey": "%s","data": {"User_Oid":"%s","User_Password":"%s"}}' % (self.login_key, self.user_name, self.pass_word) r = self.session.post(self.api1['login_url'], data=dataform, headers=headers)