python qq群_python qq群机器人怎么弄

展开全部

首先第一步就是打开网页版的qq,打开浏览器的开发者模式 这里可32313133353236313431303231363533e58685e5aeb931333361326362以监控所有的请求!

打开登录界面的的时候

\

会捕捉到一个GET请求

https://ssl.ptlogin2.qq.com/check?uin=10588690&appid=1003903&js_ver=10080&js_type=0&login_sig=YW1ZUUsIU*7FepsR1blgEgcSVWeHCrNVVquTT1LZ0paOxZ-6xHtypEqNGoo-VELQ&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html&r=0.5928007187321782其中uin是你的QQ号

返回值是 ptui_checkVC("1','AAr4bdjMeh2hEa77PTuoHhqMTxbRqOp3','\x00\x00\x00\x00\x00\xa1\x92\x12');其中1表示需要验证码 还有一种返回值 ptui_checkVC('0','!LJV','\x00\x00\x00\x00\x00\xa1\x92\x12') 这种表示是不需要的验证码的?

def CheckVerify(self,uin):

check="https://ssl.ptlogin2.qq.com/check?uin={uin}&appid=1003903&js_ver=10080&js_type=0&login_sig=YPD0P*wu2n8vW1OS2f7VfzvPf3Ku5vnkP4nzImF0GybR02fsKZdjGYB7f9R7nQRn&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html&r=0.8179273759014904"check=check.replace('{uin}',uin)

pattern=re.compile("ptui_checkVC\('(.*)','(.*)','(.*)'\);")result=self.Get(check)

checked= pattern.search(result).groups()

print 'Step1: CheckVerify'

return checked

获取验证码的方法

def GetVerify(self):

#url = 'https://ssl.captcha.qq.com/getimage?&uin='+str(self.QQ)+'&aid=1002101&0.45644426648505' + str(random.randint(10,99))verify="https://ssl.captcha.qq.com/getimage?aid=1003903&r=0.6472875226754695&uin={QQ}&cap_cd=aSD-ZVcNEcozlZUurhNYhp-MBHf4hjbJ"verify=verify.replace('{QQ}',self.QQ)

path= r"c:/verify/1.jpg"

#data = urllib.urlretrieve(url,path)

data = urllib2.urlopen(verify)

localPic =open(r"c:/verify/1.jpg",'wb')

localPic.write(data.read())

localPic.close()

data.close()

输入用户名和密码 还有验证码后发送一个GET请求https://ssl.ptlogin2.qq.com/login?u=10588690&p=AB80CD3B6429D9660878E93058DD78BD&verifycode=TEYX&webqq_type=10&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&daid=164&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=6-14-296574&mibao_css=m_webqq&t=1&g=1&js_type=0&js_ver=10080&login_sig=YW1ZUUsIU*7FepsR1blgEgcSVWeHCrNVVquTT1LZ0paOxZ-6xHtypEqNGoo-VELQ&pt_uistyle=5这里面u代表账号 p代表密码 密码是经过一定算法加密的 verify是验证码加密算法如下

def PasswordSecret(self,password,v1,v2,md5=True):

if md5==True:

password=self.PCMd5(password).upper()

length=len(password)

temp=''

for i in range(0,length,2):

temp+=r'\x'+password[i:i+2]

return self.PCMd5(self.PCMd5(self.hex2asc(temp)+self.hex2asc(v2)).upper()+v1).upper()#md5加密函数

def PCMd5(self,s):

h=hashlib.md5()

h.update(s)

return h.hexdigest()

#16进制转字符

def hex2asc(self,s):

_str="".join(s.split(r'\x'))

length=len(_str)

data=''

for i in range(0,length,2):

data+=chr(int(_str[i:i+2],16))

return data

然后是登录部分代码

def Login(self,uin,pwd):

#获取参数

cheked=self.CheckVerify(uin)

#加密密码

#pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])#pwd=self.PasswordSecret(pwd,r'AAST',r'\x00\x00\x00\x00\x00\xa1\x92\x12')loginurl="https://ssl.ptlogin2.qq.com/login?u={uin}&p={pwd}&verifycode={verify}&webqq_type=10&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&daid=164&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=4-30-135914&mibao_css=m_webqq&t=1&g=1&js_type=0&js_ver=10080&login_sig=YPD0P*wu2n8vW1OS2f7VfzvPf3Ku5vnkP4nzImF0GybR02fsKZdjGYB7f9R7nQRn&pt_uistyle=5"loginurl=loginurl.replace('{uin}',uin)

#loginurl=loginurl.replace('{pwd}',pwd)

#loginurl=loginurl.replace('{verify}',cheked[1])#result=Get(loginurl)

if(cheked[0]=="1"):

#下载验证码

self.GetVerify()

image = Image.open(r"c:/verify/1.jpg")

image.show()

code=raw_input("verifycode:").strip()

loginurl=loginurl.replace('{verify}',code.upper())pwd=self.PasswordSecret(pwd,r''+code.upper(),cheked[2])#pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])else:

loginurl=loginurl.replace('{verify}',cheked[1])pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])loginurl=loginurl.replace('{pwd}',pwd)

result=self.Get(loginurl,'ssl.ptlogin2.qq.com','https://ui.ptlogin2.qq.com/cgi-bin/login?daid=164&target=self&style=5&mibao_css=m_webqq&appid=1003903&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20140514001',None)print 'Step2: Login'

pattern=re.compile("ptuiCB\('(.*)','(.*)','(.*)','(.*)','(.*)',\s'(.*)'\);")ret= pattern.search(result).groups()

#获取必要的cookie 否则第二次登陆会出错

self.Get(ret[2])

print 'Step3: GetCookie'

for c in self.cj:

if c.name=="ptwebqq":

self.ptwebqq=c.value

return result

登录成功后服务器会返回一串json数据

ptuiCB('0','0','http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin=10588690&service=login&nodirect=0&ptsig=*ZwU0pfTmYP93Fbdt6uSzbbODzlZ0EY9g25PDge5zZU_&s_url=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0&regmaster=0&pt_login_type=1&pt_aid=0&pt_aaid=0&pt_light=0','0','登录成功!', '小竹');第一个为0 就表示登录成功了 ,但是这并没有真正的登录成功上面的返回值中的url是用来获取一个关键cookie的 那就是ptwebqq然后进行第二次登录,这次才是真正的登录

http://d.web2.qq.com/channel/login2

请求如下

Accept: */*

Accept-Encoding: gzip,deflate,sdch

Accept-Language: zh-CN,zh;q=0.8

Connection: keep-alive

Content-Length: 244

Content-Type: application/x-www-form-urlencodedCookie: o_cookie=455910092; RK=fMEaWEZ0Qc; ts_last=web2.qq.com/; ts_refer=www.baidu.com/; ts_uid=4588821804; pgv_pvid=914251705; pgv_info=ssid=s3525422600&pgvReferrer=; verifysession=h02LeYrtarkWBZeSu_czkiczeNSNlDm7V1mCm-A5qatkwnHaNfgb2z46zH4X7OfyhFT7wH6LfschPvSLhDGXFA4eA**; ptui_loginuin=10588690; ptisp=cnc; ptcz=dace9cf90e7064a16ee56c8153273eff9f2de1d2827ba31f6571412ac18c50c3; ptwebqq=b21232ed3519839063d1c2ead8a8588c385d168097efdf88bc56e1a78be7dfb4; pt2gguin=o0010588690; uin=o0010588690; skey=@gmEO6N2JD; p_uin=o0010588690; p_skey=cZ5*kS-NOcXlD2Q0AEpJnmExwC2yA0g7jbTygpVFiA8_; pt4_token=1SyuJ39Eq6oKEwEhGIizeg__Host: d.web2.qq.com

Origin: http://d.web2.qq.com

Referer: http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=2User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36Form Dataview sourceview URL encoded

r: {"status":"online","ptwebqq":"b21232ed3519839063d1c2ead8a8588c385d168097efdf88bc56e1a78be7dfb4","passwd_sig":"","clientid":"7963288","psessionid":null}

clientid: 7963288

psessionid: null

其中的ptwebqq就是刚才我们从cookie中获取的这部分代码是

def Login2(self):

try:

url="http://d.web2.qq.com/channel/login2"postdata="r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22{$ptwebqq}%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22{$clientid}%22%2C%22psessionid%22%3Anull%7D&clientid={$clientid}&psessionid=null"postdata=postdata.replace("{$ptwebqq}",self.ptwebqq)postdata=postdata.replace("{$clientid}",str(self.clientid))print 'Step4: Login2'

result=self.Post(url,postdata,QQRobot.HOST[0],QQRobot.REFERER[0],QQRobot.ORIGIN[0])retjson=json.loads(result)

retjson=retjson["result"]

return retjson

except Exception,e:

print "Login2 error "+str(e)

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值