qq空间登陆登录入口,qq空间登陆登录

前言我们添加一个模拟登录QQ空间的例子~,让我们愉快地开始吧~

开发工具Python版本:3.6.4相关模块:requests模块;

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_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'复制代码简单抓包可以发现二维码登录的接口很可能是这个(ptqrlogin看着就像是二维码登录):

更多Python学习资料可以私信关键字【资料】领取

看下请求这个链接需要哪些参数吧:

更多Python学习资料可以私信关键字【资料】领取

测试一下,可以发现大部分参数是固定的,即:

u1:https://qzs.qq.com/qzone/v5/loginsucc.html?para=izoneptredirect:0h:1t:1g:1from_ui:1ptlang:2052js_ver:19112817js_type:1pt_uistyle:40aid:549000912daid:5ptdrvs:AnyQUpMB2syC5zV6V4JDelrCvoAMh-HP6Xy5jvKJzHBIplMBK37jV1o3JjBWmY7j*U1eD8quewY_has_onekey:1复制代码所以我们只需要知道以下参数就行啦:

actionlogin_sigptqrtoken复制代码很显然,action的构造方式应该是这样的:

'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;i<n;++i)e+=(e<<5)+t.charCodeAt(i);return2147483647&e}复制代码转为python代码就是:

defdecryptQrsig(qrsig):e=0forcinqrsig:e+=(e<<5)+ord(c)return2147483647&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复制代码来检测二维码当前的状态:

本文来自“九月朦胧”用户投稿,该文观点仅代表作者本人,不代表华夏信息网立场,本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容,请发送邮件至1470280261#qq.com举报,一经查实,本站将立刻删除、维护您的正当权益。如若转载,请注明出处:http://www.xxxwhg.com/zh/97006.html

上一篇 2023-01-02 08:08:02
下一篇 2023-01-02 10:06:03

相关推荐