资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
http:/cto.csdn.net/Article.aspx?Name=liy这样的返回值,这其中0是代表正常状态,不采用图片验证。但是如果短时间内这个帐号多次在不同的 ip 登录,那么返回值就是另外的一种返回值了,那表明需要进行图片验证码验证。 此外,0还有可能变为其他的数值,用来标明诸如帐号不存在,帐号状态不正确,帐号已锁定等等的。 。 。 。 。而后面的!AFO 是四位则是我们需要获得的原始令牌值,它是由腾讯服务器随机生成的一个令牌的原始密钥。当然也许您在获取的时候会发现这个值并不是4位,而是很多位。那么就要恭喜您了,您获得也是令牌的原始密钥,只不过不同的是,您获得是图片验证码的原始密钥而已。 当然其实图形验证码的自动识别也很简单,只是这已经超出本文的范围了,以后有机会可以与大家再次分享下。此时,当我们正确的获得!AFO 时就已经完成了第一次的验证!但是有一点需要注意的是:腾讯的令牌是存储在 cookies 中的, 所以请注意每次操作都必须要保存好服务器返回来的 cookies。以下为 python 语言写的的示例代码,此代码可以从 http:/code.google.com/p/linblog/ 中的pushmodel.py 文件中获取。 01 def Get_qq_msg_val(self,username,password): 02 verifyURL = http:/ptlogin2.qq.com/check?uin=%s U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko)_chrome/0.4.2.80 Safari/525.13, 13 ,) 14 cookie1 = Cookie.SimpleCookie(result.headers.get(set-cookie, ) 15 verifyCode=result.content18:-3 16 if len(verifyCode)4: 17 return False,None 18 loginURL += “u=%s U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko)_chrome/0.4.2.80 Safari/525.13, 26 , 27 method=urlfetch.GET, 28 follow_redirects = False, 29 ) 30 setCookies = result.headers.get(set-cookie, ).split(;) 31 cookie2 = 32 cookie2+=setCookies29 33 cookie2+=setCookies7 34 cookie2+=setCookies4 35 cookie2+=;+setCookies0 36 cookie2 = cookie2.replace(, ;) 37 cookie2 = cookie21: 38 callback_url = result.headers.get(location,http:/t.qq.com) 39 result,cookies = self.do_redirect(callback_url, cookie2) 40 41 return result,cookies 2、此时我们需要对获取到的原始密钥进行一系列的运算,从而得到令牌密钥。这个算法其实也很简单,就是先把用户密码连续进行两次 md5加密,每次 md5加密输出二进制的结果,然后在对经过两次 md5加密后的结果在进行一次 md5加密,最后输出16进制大写的结果。在把我们第一步获取到的原始密钥合并在此结果之后,形成一个新的字符串。并且再次对此字符串进行 md5加密,并输出16进制大写的字符串。此时,此字符串就为令牌密钥了。示例代码如下 1 def md5hash(self,str): 2 return hashlib.md5(str).digest() 3 def hex_md5hash(self,str): 4 return hashlib.md5(str).hexdigest().upper() 5 def md5hash_3(self,str): 6 return self.hex_md5hash(self.md5hash(self.md5hash(str) 7 def EncodePasswordWithVerifyCode(self,pwd, verifyCode): 8 return self.hex_md5hash(self.md5hash_3(pwd) + verifyCode.upper() 1 EncodePasswordWithVerifyCode()即为此加密算法,pwd 是密码,verifyCode 为我们第一步获取到的4位的原始密钥。 3、接下来,我们需要把这个原始密钥送到腾讯的服务器进行验证,并返回令牌结果。服务器的地址为:http:/ptlogin2.qq.com/login?u=alexliyu2012qq.com U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko)_chrome/0.4.2.80 Safari/525.13, 08 method=urlfetch.GET, 09 follow_redirects = False, 10 ) 11 return result,cookie 三、如何操作腾讯的应用服务 这个其实就是苦功夫了,你可以通过 socket 直接与服务器进行通讯,或者使用 webqq的协议,或者使用腾讯每个服务自己的 web 页面的接口来实现。但是,这些都需要您去进行嗅探并且分析协议的内容。相对来说,web 页面直接的接口是最简单的,无非就是 post 表单过去,或者对页面进行 get 请求,然后得到返回值,在对返回值进行操作并再次的发起请求而已。其次是 webqq 协议也相对好解决它是通过与 http:/web-proxy24.qq.com/ (24这个数字是可以变化的,具体看你使用哪个服务器了,这只是腾讯的通信代理服务器)进行 json 格式的数据交换而已,而且所有信息都是明文的,也很好理解。自己尝试一段时间,就能搞清楚协议中每个参数以及 api 的含义了。对此,李昱有利用业余时间做了一个 qq 聊天机器人玩,但是讲起来太多了,也太敏感了,因此本文并不进行探讨,以后有空在与大家进行分享。下面就简单的给出发布 qq 微博与qzone 文章的代码以便于大家理解,具体不再进行解释了。 qq 微博的发送代码: 01 def send_qq_msgs(self,username,password,msg,memcachekey): 02 “ 03 send qq msgs. use qq username, password. 04 the msgs parameter is a message list, not a single string. 05 “ 06 cookie= 07 if memcache.get(memcachekey): 08 cookie=memcache.get(memcachekey) 09 else: 10 result,oldcookie=self.Get_qq_msg_val(username,password) 11 if result=False: 12 return False 13 cookie=%s;%s% (result.headers.get(set-cookie, ),oldcookie) 14 memcache.set(memcachekey,cookie,36000) 15 msg=unescape(msg) 01 form_fields = 02 “content“: msg, 03 “pic“:, 04 “countType“:, 05 “viewModel“:1 06 07 form_data = urllib.urlencode(form_fields) 08 try: 09 result = urlfetch.fetch(url=“http:/t.qq.com/publish.php?rnd=0.5100760071072727“, 10 payload=form_data, 11 method=urlfetch.POST, 12 headers=Referer:http:/t.qq.com, 13 Cookie : cookie, 14 user-agent:Mozilla/5.0 (Linux; U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko)_chrome/0.4.2.80 Safari/525.13, 15 16 ,follow_redirects = False) 17 except: 18 return False 19 if result.status_code = 200: 20 return True 21 else: 22 return False qzone 的代码: 01 def send_qzone2(self,username,password,content,title,html): 02 “ 03 send qzone blog. use username, password,content,title,html. 04 the content parameter like html,but no html tag. 05 “ 06 memcachekey=send_qzone2 07 cookie= 08 if memcache.get(memcachekey): 09 cookie=memcache.get(memcachekey) 10 logging.info(get cookie from memcache) 11 else: 12 result,oldcookie=self.Get_qzone2_val(username,password) 13 cookie=%s;%s% (result.headers.get(set-cookie, ),oldcookie) 14 memcache.set(memcachekey,cookie,36000) 15 logging.info(set cookie) 16 tmphash=self.Tmp_skey_get(cookie) 17 tmphash=self.myhash(tmphash) 18 category=个人日记 19 form_fields = 20 “uin“:939567050, 21 “category“:htmllib.encoding(category,gb18030), 22 “title“:title, 23 “content“:content, 24 “html“:html, 25 “cb_autograph“:1, 26 “topflag“:0, 27 “needfeed“:0, 28 “lp_type“:0, 29 “g_tk“:tmphash, 30 “scorr_20100723_“:http:/qzs.qq.com/qzone/newblog/v5/editor.html|http:/qzs.qq.com/qzone/newblog/v5/editor.htmlhttp:/user.q
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号