亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python3.2模擬實(shí)現(xiàn)webqq登錄

 更新時(shí)間:2016年02月15日 09:37:32   投稿:lijiao  
這篇文章主要介紹了Python模擬實(shí)現(xiàn)webqq登錄的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

這是我最初學(xué)習(xí)時(shí)自己做的一個(gè)python模擬登錄webqq的實(shí)例代碼,具體代碼如下

import hashlib
from urllib import request,parse
from http import cookiejar
import re,random,time
import threading as th
import json.encoder as json_encode
import json.decoder as json_decode
class 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):
    """
      初始化模擬進(jìn)程
    """
    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):
    """
      請(qǐng)求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:
      #執(zhí)行二次登錄
      self.__ptwebqq = self.__getcookies('ptwebqq')
      self.__skey = self.__getcookies('skey')
      self.__request_post()
    elif str.find('不正確') != -1:
      print('你輸入的帳號(hào)或者密碼不正確,請(qǐng)重新輸入。')
    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),'clientid':self.__clientid,'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):
    """
      不知道干嘛的,一分鐘連接一次,屬于長(zhǎng)連接,接收消息
      @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),'clientid':self.__clientid,'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):
    """
      #也不知道是什么,反正一直請(qǐng)求
      @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,'POST',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,'POST',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,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 +"\",[\"font\",{\"name\":\"宋體\",\"size\":\"10\",\"style\":[0,0,0],\"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,'clientid':self.__clientid,'psessionid':self.__psessionid}
    array = {'r':json_encode.JSONEncoder().encode(a),'clientid':self.__clientid,'psessionid':self.__psessionid}
    str = self.__request(url,'POST',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,0,0],"name":"\u5B8B\u4F53"}],"\u4E0D\u662F\u5427\u3002"]}}]}
 
    '''
    self.__send_message(uid,'我是機(jī)器人%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":"[\"哈哈哈,測(cè)試\",\"\\n【提示:此用戶正在使用WebQQ:http://webqq.qq.com/】\",[\"font\",      {\"name\":\"宋體\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]","msg_id":31330002,"clientid":"76133590",
      "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 + "\",[\"font\",{\"name\":\"宋體\",\"size\":\"10\",\"style\":[0,0,0],\"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,'content':msg,'msg_id':self.__send_num,'clientid':self.__clientid,'psessionid':self.__psessionid}
    array = {'r':json_encode.JSONEncoder().encode(a),'clientid':self.__clientid,'psessionid':self.__psessionid}
    str = self.__request(url,'POST',array)
    print(str)
    pass
  def __group_message(self,gid):
    '''
      {"retcode":0,"result":[{"poll_type":"group_message","value":{"msg_id":8044,"from_uin":1132101900,"to_uin":644826377,"msg_id2":178306,"msg_type":43,"reply_ip":2886742214,"group_code":317106137,"send_uin":3023379661,"seq":10654,"time":1316143836,"info_seq":32946855,"content":[["font",{"size":13,"color":"000000","style":[0,0,0],"name":"\u5B8B\u4F53"}],"\u5DE5"]}}]}
 
    '''
    self.__send_group_message(gid,'我是機(jī)器人%s' % time.time())
    pass
  def __Login(self):
    """
      qq登錄
    """
    self.__qq = input('QQ號(hào):')
    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] #驗(yàn)證碼 \
    )
    self.__request_login()
    pass
 
s = QQ()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python備份目錄及目錄下的全部?jī)?nèi)容的實(shí)現(xiàn)方法

    Python備份目錄及目錄下的全部?jī)?nèi)容的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇Python備份目錄及目錄下的全部?jī)?nèi)容的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 淺析Python 多行匹配模式

    淺析Python 多行匹配模式

    這篇文章主要介紹了Python 多行匹配模式的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python標(biāo)準(zhǔn)庫(kù)itertools的使用方法

    Python標(biāo)準(zhǔn)庫(kù)itertools的使用方法

    本文匯總整理了Python標(biāo)準(zhǔn)庫(kù)itertools的使用方法,并提供簡(jiǎn)單應(yīng)用示例;如果還不能滿足你的要求,歡迎加入補(bǔ)充
    2020-01-01
  • 如何在PyCharm中配置使用Anaconda環(huán)境

    如何在PyCharm中配置使用Anaconda環(huán)境

    這篇文章主要介紹了如何在PyCharm中配置使用Anaconda環(huán)境,圖文講解寫(xiě)的非常詳細(xì)簡(jiǎn)單易懂,還不會(huì)的小伙伴快來(lái)看看吧
    2023-03-03
  • Python利用selenium建立代理ip池訪問(wèn)網(wǎng)站的全過(guò)程

    Python利用selenium建立代理ip池訪問(wèn)網(wǎng)站的全過(guò)程

    selenium控制瀏覽器也是可以使用代理ip的,下面這篇文章主要給大家介紹了關(guān)于Python利用selenium建立代理ip池訪問(wèn)網(wǎng)站的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • 利用Python實(shí)現(xiàn)獲取照片位置信息

    利用Python實(shí)現(xiàn)獲取照片位置信息

    Python中的exifread庫(kù),不僅僅是 GPS 信息,幾乎能獲得圖片的所有信息。本文就將利用這個(gè)庫(kù)實(shí)現(xiàn)獲取照片位置信息,感興趣的可以了解一下
    2022-08-08
  • Python實(shí)現(xiàn)刪除list列表重復(fù)元素的方法總結(jié)

    Python實(shí)現(xiàn)刪除list列表重復(fù)元素的方法總結(jié)

    在Python編程中,我們經(jīng)常需要處理列表中的重復(fù)元素,這篇文章為大家介紹了五種高效的方法來(lái)刪除列表中的重復(fù)元素,希望對(duì)大家有所幫助
    2023-07-07
  • Python內(nèi)建類型float源碼學(xué)習(xí)

    Python內(nèi)建類型float源碼學(xué)習(xí)

    這篇文章主要為大家介紹了Python內(nèi)建類型float源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 通過(guò)底層源碼理解YOLOv5的Backbone

    通過(guò)底層源碼理解YOLOv5的Backbone

    yolov5的特征提取網(wǎng)絡(luò)兼顧速度與精度,將PAN與PFN深度融合,對(duì)不同尺度魯棒性強(qiáng),可以即插即用,后接不同的檢測(cè)器,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)底層源碼理解YOLOv5的Backbone的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • OpenCV4.1.0+VS2017環(huán)境配置的方法步驟

    OpenCV4.1.0+VS2017環(huán)境配置的方法步驟

    這篇文章主要介紹了OpenCV4.1.0+VS2017環(huán)境配置的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論