Python3.2模拟实现webqq登录

Python3.2模拟实现webqq登录,第1张

概述这是我最初学习时自己做的一个python模拟登录webqq的实例代码,具体代码如下

这是我最初学习时自己做的一个python模拟登录webqq的实例代码,具体代码如下

import hashlibfrom urllib import request,parsefrom http import cookiejarimport re,random,timeimport threading as thimport Json.encoder as Json_encodeimport Json.decoder as Json_decodeclass QQ:  """   Login QQ  """  __headers ={        'User-Agent':'Mozilla/5.0 (windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML,like Gecko) Chrome/12.0.742.9 Safari/534.30',\        'Referer':'http://ui.ptlogin2.qq.com/cgi-bin/login?target=self&style=5&mibao_CSS=m_webqq&appID=1003903&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fwebqq.qq.com%2Floginproxy.HTML&f_url=loginerroralert&strong_login=1&login_state=10&t=20110909003'\  }  __cookiepath = 'C:\Users\dingyangfan\Desktop\PHP\tt.txt'  __qq = None  __pswd = None  __verifycode = None  __clIEntID = 21628014  __http = {}  __psessionID = ''  __ptwebqq = ''  __vfwebqq = ''  __skey = ''  __poll2 = None  __get_msg_tip = None  __rc = 0  __send_num = 31330000  def __init__(self):    self.httpproess()    self.__Login()    pass  def __preprocess(self,password,verifycode):    """      QQ密码加密部份    """    return hashlib.md5( (self.__md5_3((password).encode('utf-8')) + (verifycode).upper()).encode('utf-8')).hexdigest().upper()    pass   def __md5_3(self,str):    """      QQ密码md5_3部份    """    return hashlib.md5(hashlib.md5(hashlib.md5(str).digest()).digest()).hexdigest().upper()    pass  def httpproess(self):    """      初始化模拟进程    """    self.__http['cj'] = cookiejar.MozillacookieJar(self.__cookiepath)    self.__http['opener'] = request.build_opener(request.httpcookieProcessor(self.__http['cj']))    return self.__http    pass  def __request(self,url,method='GET',data={},savecookie=False):    """      请求url    """    if (method).upper() == 'POST':      data = parse.urlencode(data).encode('utf-8')      self.__http['req'] = request.Request(url,data,self.__headers)    else:      self.__http['req'] = request.Request(url=url,headers=self.__headers)    fp = self.__http['opener'].open(self.__http['req'])    try:      str = fp.read().decode('utf-8')    except UnicodeDecodeError:      str = fp.read()    if savecookie == True:      self.__http['cj'].save(ignore_discard=True,ignore_expires=True)    fp.close()    return str    pass  def __getcookies(self,name):    fp = open(self.__cookiepath)    fp.seek(130)    for read in fp.readlines():      str = read.split(name)      if len(str) == 2:        fp.close()        return str[1].strip()    fp.close()    return None    pass  def __getverifycode(self):    """      @url:http://ptlogin2.qq.com/check?uin=644826377&appID=1003903&r=0.56373973749578    """    urlv = 'http://ptlogin2.qq.com/check?uin='+ ('%s' % self.__qq)+'&appID=1003903&r='+ ('%s' % random.Random().random())    str = self.__request(url = urlv,savecookie=True)    str = re.findall(r'\d|(?<=\')[a-zA-Z0-9\!]{4}',str)    return str    pass  def __request_login(self):    """      @url:http://ptlogin2.qq.com/login      @params:{u:644826377          p:73DA5C1145E0F82247F60B3A17B89E6A  verifycode:!S10  webqq_type:10          remember_uin:1 login2qq:1 aID:1003903 u1:http://webqq.qq.com/loginproxy.HTML?login2qq=1&webqq_type=10          h:1 ptredirect:0  ptlang:2052 from_ui:1  pttype:1 dumy:          fp:loginerroralert  action:1-24-62651 mibao_CSS:m_webqq}    """    urlv = 'http://ptlogin2.qq.com/login?u='+('%s' % self.__qq) +'&' + 'p=' + ('%s' % self.__pswd) + '&verifycode='+ ('%s' % self.__verifycode[1]) +'&remember_uin=1&aID=1003903' + "&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.HTML%3Fstrong%3Dtrue" + '&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert'    str = self.__request(url = urlv,savecookie=True)    if str.find('登录成功') != -1:      #执行二次登录      self.__ptwebqq = self.__getcookies('ptwebqq')      self.__skey = self.__getcookies('skey')      self.__request_post()    elif str.find('不正确') != -1:      print('你输入的帐号或者密码不正确,请重新输入。')    else:      print('登录失败')    pass  def __request_post(self):    '''      http://d.web2.qq.com/channel/login2      r:{"status":"online","ptwebqq":"95b148b95af9be7677757b3a629e3904f52f153d0b714c527f81f8d9e385867a","passwd_sig":"","clIEntID":"21628014","psessionID":null}      clIEntID:21628014      psessionID:null    '''    self.__headers.update({'Referer':'http://d.web2.qq.com/proxy.HTML?v=20110331002&callback=2'})    a = {'status':'online','ptwebqq':self.__getcookies('ptwebqq'),'passwd_sig':'','clIEntID':self.__clIEntID,'psessionID':'null'}    array = {'r':Json_encode.JsONEncoder().encode(a),'psessionID':'null'}    url = 'http://d.web2.qq.com/channel/login2'    str = self.__request(url,'POST',array)    str = Json_decode.JsONDecoder().decode(str)    self.__psessionID = str['result']['psessionID']    self.__vfwebqq = str['result']['vfwebqq']    self.__get_frIEnd_info2()    self.__get_user_frIEnds2()    self.__get_group_name_List_mask2()    self.__poll2_()    self.__get_msg_tip_()    pass  def __poll2_(self):    """      不知道干嘛的,一分钟连接一次,属于长连接,接收消息      @url:http://d.web2.qq.com/channel/poll2      r:{"clIEntID":"9467930","psessionID":"8368046764001e636f6e6e7365727665725f77656271714031302e3132382e36362e31313500003058000000c0026e040009456f266d0000000a407169446b464737436b6d00000028f8d256743e5c191cb40a2217845fab12fda62acd2e6145ae196976d7a8b3bb11a64d3c9565868322","key":0,"IDs":[]}      clIEntID:9467930      psessionID:8368046764001e636f6e6e7365727665725f77656271714031302e3132382e36362e31313500003058000000c0026e040009456f266d0000000a407169446b464737436b6d00000028f8d256743e5c191cb40a2217845fab12fda62acd2e6145ae196976d7a8b3bb11a64d3c9565868322    """    self.__headers.update({'Referer':'http://d.web2.qq.com/proxy.HTML?v=20110331002&callback=2'})    urlv = 'http://d.web2.qq.com/channel/poll2'    a = {'clIEntID':self.__clIEntID,'psessionID':self.__psessionID,'key':0,'IDs':[]}    array = {'r':Json_encode.JsONEncoder().encode(a),'psessionID':self.__psessionID}    self.__poll2 = self.__request(url = urlv,method='POST',data = array)    str = Json_decode.JsONDecoder().decode(self.__poll2)    print(str)    if str['retcode'] == 0:      if str['result'][0]['poll_type'] == 'message':        self.__message(str['result'][0]['value']['from_uin'])      elif str['result'][0]['poll_type'] == 'group_message':        self.__group_message(str['result'][0]['value']['from_uin'])        pass    t1 = th.Timer(1,self.__poll2_)    t1.start()    pass  def __get_msg_tip_(self):    """      #也不知道是什么,反正一直请求      @url:http://webqq.qq.com/web2/get_msg_tip?uin=&tp=1&ID=0&retype=1&rc=64&lv=2&t=1315746772886    """    self.__headers.update({'Referer':'http://webqq.qq.com/'})    self.__rc += 1    num = 100 + self.__rc    t = '%s' % '%d' % time.time() + '%s' % num    urlv = 'http://webqq.qq.com/web2/get_msg_tip?uin=&tp=1&ID=0&retype=1&rc='+'%s'% self.__rc +'&lv=3&t=' + t    self.__get_msg_tip = self.__request(urlv)    print(self.__get_msg_tip)    t2 = th.Timer(60,self.__get_msg_tip_)    t2.start()    pass  def __get_frIEnd_info2(self):    '''      @url:http://s.web2.qq.com/API/get_frIEnd_info2?tuin=self.__qq&verifysession=&code=&vfwebqq=self.__vfwebqq    '''    self.__headers.update({'Referer':'http://s.web2.qq.com/proxy.HTML?v=20110412001&callback=1&ID=2'})    url = 'http://s.web2.qq.com/API/get_frIEnd_info2?tuin='+ self.__qq + '&verifysession=&code=&vfwebqq=' + self.__vfwebqq + '&t=%s' % '%d' % time.time() + '100'    str = self.__request(url)    print(str)    pass  def __get_user_frIEnds2(self):    '''      @url:http://s.web2.qq.com/API/get_user_frIEnds2    '''    self.__headers.update({'Referer':'http://s.web2.qq.com/proxy.HTML?v=20110412001&callback=1&ID=2'})    url = 'http://s.web2.qq.com/API/get_user_frIEnds2'    a = {'h':'hello','vfwebqq':self.__vfwebqq}    array = {'r':Json_encode.JsONEncoder().encode(a)}    str = self.__request(url,array)    print(str)    pass  def __get_group_name_List_mask2(self):    '''      @url:http://s.web2.qq.com/API/get_group_name_List_mask2    '''    self.__headers.update({'Referer':'http://s.web2.qq.com/proxy.HTML?v=20110412001&callback=1&ID=2'})    url = 'http://s.web2.qq.com/API/get_group_name_List_mask2'    a = {'vfwebqq':self.__vfwebqq}    array = {'r':Json_encode.JsONEncoder().encode(a)}    str = self.__request(url,array)    print(str)    pass  def __send_message(self,uID,msg):    '''      @url:http://d.web2.qq.com/channel/send_buddy_msg2      r:{"to":3023379661,"face":180,"content":"[\"哈哈\",\"\n【提示:此用户正在使用WebQQ:http://webqq.qq.com/】\",[\"Font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0],\"color\":\"000000\"}]]","msg_ID":31330001,"clIEntID":"76133590","psessionID":"s"}        clIEntID:76133590        psessionID:s       Referer:http://d.web2.qq.com/proxy.HTML?v=20110331002&callback=2      {"retcode":0,"result":"ok"}    '''    self.__send_num +=1    msg = "[\""+ msg +"\",\"color\":\"000000\"}]]"    self.__headers.update({'Referer':'http://d.web2.qq.com/proxy.HTML?v=20110331002&callback=2'});    url = 'http://d.web2.qq.com/channel/send_buddy_msg2'    a = {'to':uID,'face':180,'content':msg,'msg_ID':self.__send_num,'psessionID':self.__psessionID}    array = {'r':Json_encode.JsONEncoder().encode(a),'psessionID':self.__psessionID}    str = self.__request(url,array)    print(str)    pass  def __message(self,uID):    '''      {"retcode":0,"result":[{"poll_type":"message","value":{"msg_ID":13013,"from_uin":3023379661,"to_uin":644826377,"msg_ID2":503935,"msg_type":9,"reply_ip":176752345,"time":1316143960,"content":[["Font",{"size":13,"color":"000000","style":[0,"name":"\u5B8B\u4F53"}],"\u4E0D\u662F\u5427\u3002"]}}]}     '''    self.__send_message(uID,'我是机器人%s' % time.time())    pass  def __send_group_message(self,gID,msg):    '''      @url:http://d.web2.qq.com/channel/send_qun_msg2      r:{"group_uin":1132101900,"content":"[\"哈哈哈,测试\","msg_ID":31330002,"psessionID":"a"}      clIEntID:76133590      psessionID:a       Referer:http://d.web2.qq.com/proxy.HTML?v=20110331002&callback=2       {"retcode":0,"result":"ok"}    '''    self.__send_num +=1    msg = "[\"" +msg + "\",\"color\":\"000000\"}]]"    self.__headers.update({'Referer':'http://d.web2.qq.com/proxy.HTML?v=20110331002&callback=2'});    url = 'http://d.web2.qq.com/channel/send_qun_msg2'    a = {'group_uin':gID,array)    print(str)    pass  def __group_message(self,gID):    '''      {"retcode":0,"result":[{"poll_type":"group_message","value":{"msg_ID":8044,"from_uin":1132101900,"msg_ID2":178306,"msg_type":43,"reply_ip":2886742214,"group_code":317106137,"send_uin":3023379661,"seq":10654,"time":1316143836,"info_seq":32946855,"\u5DE5"]}}]}     '''    self.__send_group_message(gID,'我是机器人%s' % time.time())    pass  def __Login(self):    """      qq登录    """    self.__qq = input('QQ号:')    self.__pswd = input('QQ密码:')    self.__qq = self.__qq.strip()    self.__pswd = self.__pswd.strip()    self.__verifycode = self.__getverifycode()    self.__pswd = self.__preprocess(      self.__pswd,#密码 \      '%s' % self.__verifycode[1] #验证码 \    )    self.__request_login()    pass s = QQ()

以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Python3.2模拟实现webqq登录全部内容,希望文章能够帮你解决Python3.2模拟实现webqq登录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1204787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存