当前位置:大学生在线网大学生专栏电脑学习qq大全QQ技巧腾讯QQ空间登录的方法实现方式与验证过程分析

腾讯QQ空间登录的方法实现方式与验证过程分析

08-17 02:13:13  浏览次数:292次  栏目:QQ技巧
标签:qq技巧大全,qq飞车技巧,qq聊天技巧, 腾讯QQ空间登录的方法实现方式与验证过程分析,http://www.dxs89.com

下面是李昱的关于QQ空间登陆方式以及写法,并对实现方式与写法进行了解释,主要用与在设计QQ空间小工具需要验证空间登陆信息时候用到,比如留言,日志提交等,还能适用到其他的腾讯产品比如微博等.

一、腾讯QQ空间登录与验证过程
       腾讯QQ空间的登录一共需要经过三次验证,分别是在登录页面1、验证帐号状态,并通过帐号获取令牌的原始密钥;2、对原始密钥进行运算生成令牌密钥并提交服务器,服务器进行一次验证;3、经过第二次验证通过,服务器自动跳转,进行第三此验证,最后返回登录令牌……终成功后才能获取到加密过后的登录令牌,而利用此令牌就可以顺利的操作任何腾讯的产品与服务了。
      接下来我们以腾讯微博为例来进行一些在合法的限度内的讲解,旨在开拓各位读者的思维与分享技术思路,因为这东西其实我用了很久很久了,相信很多技术大牛们也都自己偷偷在应用着,只是懒得拿出来分享,或者用来赚钱而已。但是很不爽的就是腾讯最近宣布推出了开放平台,可实际上是换汤不换药的东西,所以才想要跟大家分享分享。因此如果您抱着想要通过本文的讲解来进行获利的目的,那我建议您可以就此打住了。因为,接下来的内容中我并不会去讲解或者说分享那些您会感兴趣的东西。
二、协议详解
       1、言归正传,首先第一次的登录是发生在我们打开登录页面的时候。 还是以腾讯微博为例,当我们打开微博的登录页面时,页面上的js会触发一个地址:http://ptlogin2.qq.com/check?uin=939567050&appid=46000101&r=0.5354662109559408
这个地址是用来判断您的用户名是否是正常状态,以及是否有效用户名,并返回一个状态值以及一个验证码。其中uin就是你的用户名,appid指的是腾讯QQ空间的编码。r是一个随机生成的数字,用来避免浏览器缓存。
 
1正常时,请求这个地址,会获得类似ptui_checkVC('0','!AFO');这样的返回值,这其中0是代表正常状态,不采用图片验证。但是如果短时间内这个帐号多次在不同的ip登录,那么返回值就是另外的一种返回值了,那表明需要进行图片验证码验证。
此外,0还有可能变为其他的数值,用来标明诸如帐号不存在,帐号状态不正确,帐号已锁定等等的。。。。。而后面的!AFO是四位则是我们需要获得的原始令牌值,它是由腾讯服务器随机生成的一个令牌的原始密钥。当然也许您在获取的时候会发现这个值并不是4位,而是很多位。那么就要恭喜您了,您获得也是令牌的原始密钥,只不过不同的是,您获得是图片验证码的原始密钥而已。
当然其实图形验证码的自动识别也很简单,只是这已经超出本文的范围了,以后有机会可以与大家再次分享下。此时,当我们正确的获得!AFO时就已经完成了第一次的验证!但是有一点需要注意的是:腾讯的令牌是存储在cookies中的,

 2、此时我们需要对获取到的原始密钥进行一系列的运算,从而得到令牌密钥。这个算法其实也很简单,就是先把用户密码连续进行两次md5加密,每次md5加密输出二进制的结果,然后在对经过两次md5加密后的结果在进行一次md5加密,最后输出16进制大写的结果。在把我们第一步获取到的原始密钥合并在此结果之后,形成一个新的字符串。并且再次对此字符串进行md5加密,并输出16进制大写的字符串。此时,此字符串就为令牌密钥了。示例代码如下
 
1        def md5hash(self,str):
2        return hashlib.md5(str).digest()
3def hex_md5hash(self,str):
4        return hashlib.md5(str).hexdigest().upper()
5def md5hash_3(self,str):
6        return self.hex_md5hash(self.md5hash(self.md5hash(str)))
7def EncodePasswordWithVerifyCode(self,pwd, verifyCode):
8        return self.hex_md5hash(self.md5hash_3(pwd) + verifyCode.upper())
1EncodePasswordWithVerifyCode()即为此加密算法,pwd是密码,verifyCode为我们第一步获取到的4位的原始密钥。

二、先贴代码


01def Get_qzone(self,model,pushitem,**kwargs):
02                try:
03                        message = mail.EmailMessage()
04                        message.sender = '%s@qq.com'% pushitem.username
05                        message.to = '%s@qzone.qq.com'% pushitem.username
06                        message.body =htmllib.encoding(stringQ2B(htmllib.encoding(model.content)),'gb18030')
07                        message.subject =htmllib.encoding(stringQ2B(htmllib.encoding(model.title)),'gb18030')
08                        message.send()
09                        return self.Get_True(model,pushitem)
10                except Exception,data:
11                        return self.Get_False(model,pushitem,data)


三、简单解释
其实这个方法实现自己的qq空间的更新,或者实现自己的qq空间与其他博客同步更新等应用来说是最简洁的方法之一,技术含量也是最低的。
就是通过发送邮件到自己的username@qzone.qq.com来更新qq空间而已。甚至都不用写代码都可以实现,网易以及新浪的博客也具有类似的功能。
功能是简单,但是关键看怎么应用了。我是做新媒体,所以研究新媒体的营销方式,基于新媒体与基于网络的新的营销方式。
因此,我觉得这个简单的功能利用好了,能够实现非常不错的内容营销的效果。具体的,大家自己研究吧,这里仅仅抛砖引玉而已,你懂得。。。
四、其他实现方式

001       def Get_qzone2(self,model,pushitem,**kwargs):
002        """
003        this method is used to get login to website,and put the content to the qzone
004        """
005        try:
006
007
008            html=u'%s 详细内容请查看:<a herf=%s>%s</a>'% (
009                        htmllib.decoding(htmllib.Filter_content(model.content)),
010                        unicode(model.fullurl),unicode(model.fullurl))
011            html=htmllib.encoding(html,'gb18030')
012            title=htmllib.encoding(htmllib.decoding(model.title),'gb18030')
013            content=htmllib.Filter_html(html)
014            result=self.send_qzone2(pushitem.username,pushitem.password,content,title,html)
015            if result:
016                return self.Get_True(model,pushitem)
017            else:
018                return self.Get_False(model,pushitem)
019        except Exception,data:
020                return self.Get_False(model,pushitem,data)

[1] [2] [3]  下一页

,腾讯QQ空间登录的方法实现方式与验证过程分析
《腾讯QQ空间登录的方法实现方式与验证过程分析》相关文章