您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
QQ空间进入(免权限看qq空间)
代码,私信,参数QQ空间进入(免权限看qq空间)
发布时间:2016-12-08加入收藏来源:互联网点击:
Qq空间入口(未经许可查看QQ空间)
更多Python学习资料可私信关键词【资料】收集
前言
我们加一个模拟登录QQ空间的例子~,大家愉快的开始吧~
开发工具
Python版本:3.6.4
相关模块:
请求模块;
Pycryptodome模块;
以及Python自带的一些模块。
环境搭建
安装Python并将其添加到环境变量中。pip可以安装所需的相关模块。
原理简介
这里简单介绍一下模拟登录QQ空间的原理。一般可以通过手机QQ扫码和账号密码登录QQ空间。但账号密码登录有时需要验证码。为了保证登录的成功率,我们选择扫码登录。
首先,进入登录界面:
'https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy _ URL=https://qzs . QQ . com/qzone/V6/portal/proxy . html daid=5 hide _ title _ bar=1 low _ log in=0 qlog in _ auto _ log in=1 no _ verify img=1 link _ target=blank appid=549000912 style=22 target=selfs _ URL=https://qzs . QQ . com/qzone/V5/login succ . html?' Para=izonept_qr_app=手机QQ空间pt _ QR _ link=3359z.qzone.com/download.htmlself _雷古拉=3359qzs.qq.com/qzone/v6/reg/Index.html pt _ QR _ help _ link=https://z.qzone.com/download.html pt _ no _ auth=0 '复制代码。简单抓一下包就能发现二维码登录的界面大概是这个(ptqrlogin看起来就像二维码登录):
更多Python学习资料可私信关键词【资料】收集
让我们看看请求此链接需要哪些参数:
更多Python学习资料可私信关键词【资料】收集
经过测试,可以发现大多数参数是固定的,即:
u1:https://qzs . QQ . com/qzone/V5/login succ . html?para=izoneptredirect :0h :1t :1g :1 from _ ui :1 ptlang :2052 js _ ver :19112817 js _ type :1 pt _ ui style 336040 aid :5490000912 daid :5 ptvs 3360 any qupmb 2 syc 5zv 6
actionlogin_sig
ptqrtoken
显然,复制代码的操作应该是这样的:
0-0-'时间戳
复制代码至于login_sig参数,很容易发现可以请求下面的链接:
更多Python学习资料可私信关键词【资料】收集
然后在返回的cookies中获取login_sig参数:
更多Python学习资料可私信关键词【资料】收集
并请求:
https://xui.ptlogin2.qq.com/cgi-bin/xlogin?复制代码要携带的参数有:
更多Python学习资料可私信关键词【资料】收集
通过测试可以发现,上述参数都是固定的。最后剩下参数ptqrtoken。经过全局搜索,可以发现ptqrtoken的计算方法写在一个js文件中:
更多Python学习资料可私信关键词【资料】收集
其中,hash33的js代码为:
functionhash33(t){for(vare=0,i=0,n=t.length在;我)
e=(E5)t . charcodeat(I);(=NationalBureauofStandards)国家标准�
p;return 2147483647 & e}复制代码转为python代码就是:
def decryptQrsig(qrsig): e = 0 for c in qrsig: e += (e << 5) + ord(c) return 2147483647 & e复制代码
那么,现在的问题就是qrsig这个参数如何获得呢?和login_sig参数类似,容易发现请求以下这个链接:
更多Python学习资料可以私信关键字【资料】领取
在返回的cookies里可以得到qrsig这个参数的值:
更多Python学习资料可以私信关键字【资料】领取
而请求:
https://ssl.ptlogin2.qq.com/ptqrshow复制代码
需要携带的参数如下图所示:
更多Python学习资料可以私信关键字【资料】领取
除了t其他参数都是不变的,感觉t像个随机数(因为测试了下,发现t就算一直保持不变也没关系),既然影响不大,就懒得继续分析t到底是个啥了,就当是个随机数呗(反正位数也都是16位)。
OK,到此为止,我们大概已经了解了整个模拟登录的流程了,那就开始边写代码边进一步明确该流程呗~首先自然是获得login_sig参数:
params = { 'proxy_url': 'https://qzs.qq.com/qzone/v6/portal/proxy.html', 'daid': '5', 'hide_title_bar': '1', 'low_login': '0', 'qlogin_auto_login': '1', 'no_verifyimg': '1', 'link_target': 'blank', 'appid': '549000912', 'style': '22', 'target': 'self', 's_url': 'https://qzs.qq.com/qzone/v5/loginsucc.html?para=izone', 'pt_qr_app': '手机QQ空间', 'pt_qr_link': 'https://z.qzone.com/download.html', 'self_regurl': 'https://qzs.qq.com/qzone/v6/reg/index.html', 'pt_qr_help_link': 'https://z.qzone.com/download.html', 'pt_no_auth': '0' }res = self.session.get(self.xlogin_url, headers=self.headers, verify=False, params=params)all_cookies.update(requests.utils.dict_from_cookiejar(res.cookies))pt_login_sig = all_cookies['pt_login_sig']复制代码
然后获得ptqrtoken参数:
params = { 'appid': '549000912', 'e': '2', 'l': 'M', 's': '3', 'd': '72', 'v': '4', 't': str(random.random()), 'daid': '5', 'pt_3rd_aid': '0' }res = self.session.get(self.qrshow_url, headers=self.headers, verify=False, params=params)all_cookies.update(requests.utils.dict_from_cookiejar(res.cookies))ptqrtoken = self.__decryptQrsig(all_cookies['qrsig'])复制代码
同时,在请求上述链接的过程中,也就是:
https://ssl.ptlogin2.qq.com/ptqrshow复制代码
我们还可以获得二维码图片(即res.content其实就是二维码的图片数据),并将其显示出来:
saveImage(res.content, 'qrcode.jpg')showImage('qrcode.jpg')复制代码
接着我们通过不断请求一开始发现的二维码登录链接,即:
https://ssl.ptlogin2.qq.com/ptqrlogin复制代码
来检测二维码当前的状态:
while True: params = { 'u1': 'https://qzs.qq.com/qzone/v5/loginsucc.html?para=izone', 'ptqrtoken': ptqrtoken, 'ptredirect': '0', 'h': '1', 't': '1', 'g': '1', 'from_ui': '1', 'ptlang': '2052', 'action': '0-0-' + str(int(time.time())), 'js_ver': '19112817', 'js_type': '1', 'login_sig': pt_login_sig, 'pt_uistyle': '40', 'aid': '549000912', 'daid': '5', 'ptdrvs': 'AnyQUpMB2syC5zV6V4JDelrCvoAMh-HP6Xy5jvKJzHBIplMBK37jV1o3JjBWmY7j*U1eD8quewY_', 'has_onekey': '1' } res = self.session.get(self.qrlogin_url, headers=self.headers, verify=False, params=params) if '登录成功' in res.text: break elif '二维码已失效' in res.text: raise RuntimeError('Fail to login, qrcode has expired...') time.sleep(2)复制代码
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |