当前位置:文档之家› 腾讯通用账号登陆协议

腾讯通用账号登陆协议

腾讯通用账号登陆协议

cto.csdn./Article.aspx?Name=liy&pointid=3856[原创]李昱腾

讯产品登录协议详解发表时间xx-9-210:16:03写下这个标题的时候,您可能要问腾讯产品登录协议有什么用?很简单,qq所有产品都是

采用统一的登录协议加密登录的。

也就是说,当您能够通过使用它的协议来登录并获取到令牌后,

那么就可以任意的使用qq的各项产品了,如webqq,空间,微博,

校友。

等等的。

而本文主要就是讲述下如何通过技术手段来使用腾讯产品登录协议,从而获取到登录令牌。

所有完整的源代码,可以从我的开源项目CDM SYSTEM中的pushblog插件获取并且试用。

地址是code.google./p/linblog/

一、腾讯产品的登录与验证过程腾讯产品的登录一共需要经过三

次验证,分别是在登录页面

1、验证帐号状态,并通过帐号获取令牌的原始密钥;

2、对原始密钥进行运算生成令牌密钥并提交服务器,服务器进行一次验证;

3、经过第二次验证通过,服务器自动跳转,进行第三此验证,最后返回登录令牌……终成功后才能获取到加密过后的登录令牌,而利用此令牌就可以顺利的操作任何腾讯的产品与服务了。

接下来我们以腾讯微博为例来进行一些在合法的限度内的讲解,旨在开拓各位读者的思维与分享技术思路,因为这东西其实我用了很久很久了,相信很多技术大牛们也都自己偷偷在应用着,只是懒得拿出来分享,或者用来赚钱而已。

但是很不爽的就是腾讯最近宣布推出了开放平台,可实际上是换汤不换药的东西,所以才想要跟大家分享分享。

因此如果您抱着想要通过本文的讲解来进行获利的目的,那我建议您可以就此打住了。

因为,接下来的内容中我并不会去讲解或者说分享那些您会感兴趣的东西。

二、协议详解

1、言归正传,首先第一次的登录是发生在我们打开登录页面的时候。

还是以腾讯微博为例,当我们打开微博的登录页面时,页面上的js会触发一个地址

ptlogin2.qq./check?uin=939567050&appid=46000101&r=0.5354662 109559408这个地址是用来判断您的用户名是否是正常状态,以及是否有效用户名,并返回一个状态值以及一个验证码。

其中uin就是你的用户名,appid指的是腾讯产品的编码。

r是一个随机生成的数字,用来避免浏览器缓存。

1正常时,请求这个地址,会获得类似ptui_checkVC('0','!AFO');这样的返回值,这其中0是代表正常状态,不采用图片验证。

但是如果短时间内这个帐号多次在不同的ip登录,那么返回值就是另外的一种返回值了,那表明需要进行图片验证码验证。

此外,0还有可能变为其他的数值,用来标明诸如帐号不存在,帐号状态不正确,帐号已锁定等等的。

而后面的!AFO是四位则是我们需要获得的原始令牌值,它是由腾讯服务器随机生成的一个令牌的原始密钥。

当然也许您在获取的时候会发现这个值并不是4位,而是很多位。

那么就要恭喜您了,您获得也是令牌的原始密钥,只不过不同的是,您获得是图片验证码的原始密钥而已。

当然其实图形验证码的自动识别也很简单,只是这已经超出本文的范围了,以后有机会可以与大家再次分享下。

此时,当我们正确的获得!AFO时就已经完成了第一次的验证!但是有一点需要注意的是腾讯的令牌是存储在cookies中的,所以请注意每次操作都必须要保存好服务器返回来的cookies。

以下为python语言写的的示例代码,此代码可以从

code.google./p/linblog/中的pushmodel.py文件中获取。

01def

Get_qq_msg_val(self,username,password):02verifyURL='ptlogin 2.qq./check?uin=%s&appid=46000101&r=%s'%(username,random.ra ndom())03loginURL='ptlogin2.qq./login?'04redirectURL=''05co okie=''06qqn=username07md5Pass=''08verifyCode=''09result=ur lfetch.fetch(url=verifyURL,method=urlfetch.GET,10follow_red

irects=False,headers={11'Content-Type':'application/x--form -urlencoded',12'user-agent':'Mozilla/5.0(Linux;U;Linux

i686;en-US)AppleWebKit/525.13(KHTML,like

Gecko)_chrome/0.4.2.80Safari/525.13',13},)14cookie1=Cookie. SimpleCookie(result.headers.get('set-cookie',''))15verifyCo de=result.content[18:-3]16if len(verifyCode)>4:17return False,None18loginURL+="u=%s&p="%username19loginURL+=self.En codePasswordWithVerifyCode(password,verifyCode)20loginURL+= "&verifycode="+verifyCode+"&aid=46000101&u1=%3A%2F%2Ft.qq.& ptredirect=1&h=1&from_ui=1&fp=loginerroralert"21result=urlf etch.fetch(url=loginURL,22headers={'Referer':'t.qq.',23'Coo kie':self.make_cookie_header(cookie1),24'Content-Type':'app lication/x--form-urlencoded',25'user-agent':'Mozilla/5.0(Li nux;U;Linux i686;en-US)AppleWebKit/525.13(KHTML,like Gecko)_chrome/0.4.2.80Safari/525.13',26},27method=urlfetch. GET,28follow_redirects=False,29)30setCookies=result.headers .get('set-cookie','').split(';')31cookie2=''32cookie2+=setC ookies[29]33cookie2+=setCookies[7]34cookie2+=setCookies[4]3 5cookie2+=';'+setCookies[0]36cookie2=cookie2.replace(',','; ')37cookie2=cookie2[1:]38callback_url=result.headers.get('l ocation','t.qq.')39result,cookies=self.do_redirect(callback _url,cookie2)4041return result,cookies

相关主题