这是我最初学习时自己做的一个python模拟登录webqq的实例代码,具体代码如下
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):
\"\"\"
初始化模拟进程
\"\"\"
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),\'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):
\"\"\"
不知道干嘛的,一分钟连接一次,属于长连接,接收消息
@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):
\"\"\"
#也不知道是什么,反正一直请求
@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,\'我是机器人%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\":\"[\\\"哈哈哈,测试\\\",\\\"\\\\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,\'我是机器人%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程序设计有所帮助。