开源的,地址在https://github.com/atupal/webqq

等有时间了写一个完整的cli qq客户端。

使用方法:python login_qq.py即可

import urllib2

import httplib2

import re

import random

from encryption import QQmd5

import cookielib

import requests

import getpass

import time

import json

import urllib

class webqq:

def __init__(self, user, pwd):

self.cookies = cookielib.CookieJar()

self.opener = urllib2.build_opener(

urllib2.HTTPHandler(),

urllib2.HTTPSHandler(),

urllib2.HTTPCookieProcessor(self.cookies),

)

urllib2.install_opener(self.opener)

self.user = user

self.pwd = pwd

self.mycookie = ";"

#self.clientid = "21485768"

#self.clientid = "34592990"

self.clientid = str(random.randint(10000000, 99999999))

def getSafeCode(self):

url = 'https://ssl.ptlogin2.qq.com/check?uin=' + str(self.user) + '&appid=1003903&js_ver=10017&js_type=0&login_sig=0ihp3t5ghfoonssle-98x9hy4uaqmpvu*8*odgl5vyerelcb8fk-y3ts6c3*7e8-&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html&r=0.8210972726810724'

req = urllib2.Request(url)

#self.mycookie += "confirmuin=" + self.user + ";"

#req.add_header('Cookie', self.mycookie)

req = urllib2.urlopen(req)

#cs = ['%s=%s' % (c.name, c.value) for c in self.cookies]

#self.mycookie += ";".join(cs)

verifycode = re.search(r"'(\d)','(.+)','(.+)'", req.read())

self.check = verifycode.group(1)

self.verifycode1 = verifycode.group(2)

self.verifycode2 = verifycode.group(3)

if self.check == "1":

url = 'https://ssl.captcha.qq.com/getimage?&uin='+str(self.user)+'&aid=1002101&0.45644426648505' + str(random.randint(10,99))

req = urllib2.Request(url)

req = urllib2.urlopen(req)

self.fi = open("./image.jgp", "wb")

while 1:

c = req.read()

if not c:

break

else :self.fi.write(c)

self.fi.close()

self.verifycode1 = raw_input("verifer:")

print self.check, self.verifycode1, self.verifycode2

def loginGet(self):

#cs = ['%s=%s' % (c.name, c.value) for c in self.cookies]

#self.mycookie += ";" "; ".join(cs)

login_url = 'https://ssl.ptlogin2.qq.com/login?u='+self.user +'&p=' + str(QQmd5().md5_2(self.pwd, self.verifycode1, self.verifycode2)) + '&verifycode=' + self.verifycode1 + '&webqq_type=10&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=2-14-32487&mibao_css=m_webqq&t=1&g=1&js_type=0&js_ver=10015&login_sig=0ihp3t5ghfoonssle-98x9hy4uaqmpvu*8*odgl5vyerelcb8fk-y3ts6c3*7e8-'

req = urllib2.Request(login_url)

req.add_header("Referer", "https://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%2Fweb.qq.com%2Floginproxy.html&f_url=loginerroralert&strong_login=1&login_state=10&t=20121029001")

#req.add_header("Cookie", self.mycookie)

#self.opener.addheaders.append(("Cookie", self.mycookie))

req = urllib2.urlopen(req)

print req.read()

for cookie in self.cookies:

print cookie.name, ":", cookie.value

if cookie.name == 'ptwebqq':

self.ptwebqq = cookie.value

print urllib2.urlopen('http://web2.qq.com/web2/get_msg_tip?uin=&tp=1&id=0&retype=1&rc=0&lv=3&t=1358252543124').read()

#cs = ['%s=%s' % (c.name, c.value) for c in self.cookies]

#self.mycookie += ";" "; ".join(cs)

def loginPost(self):

url = 'http://d.web2.qq.com/channel/login2'

data = 'r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22' + self.ptwebqq + '%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22'+self.clientid+'%22%2C%22psessionid%22%3Anull%7D&clientid='+self.clientid+'&psessionid=null'

req = urllib2.Request(url, data)

#req.add_header('Cookie', self.mycookie)

req.add_header('Referer', 'http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=2')

req = urllib2.urlopen(req)

self.result = json.load(req)

print self.result['result']['vfwebqq'], self.result['result']['psessionid']

def getGroupList(self):

url = 'http://s.web2.qq.com/api/get_group_name_list_mask2'

data = 'r=%7B%22vfwebqq%22%3A%22'+self.result['result']['vfwebqq'] +'%22%7D'

req = urllib2.Request(url, data)

req.add_header('Referer', 'http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=1')

req = urllib2.urlopen(req)

self.group = json.load(req)

pass

def getFriend(self):

url = 'http://s.web2.qq.com/api/get_user_friends2'

data = 'r=%7B%22vfwebqq%22%3A%22'+self.result['result']['vfwebqq'] +'%22%7D'

req = urllib2.Request(url, data)

req.add_header('Referer', 'http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=1')

req = urllib2.urlopen(req)

self.friend = json.load(req)

print self.friend

pass

def getMeg(self):

print urllib2.urlopen('http://web2.qq.com/web2/get_msg_tip?uin=&tp=1&id=0&retype=1&rc=0&lv=3&t=1358252543124').read()

pass

def poll2(self):

url = 'http://d.web2.qq.com/channel/poll2'

data ='r=%7B%22clientid%22%3A%22'+self.clientid+'%22%2C%22psessionid%22%3A%22'+self.result['result']['psessionid']+'%22%2C%22key%22%3A0%2C%22ids%22%3A%5B%5D%7D&clientid='+self.clientid+'&psessionid='+self.result['result']['psessionid']

req = urllib2.Request(url, data)

#req.add_header('Cookie', self.mycookie)

req.add_header('Referer', 'http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=3')

result = json.load(urllib2.urlopen(req))

print result

def sendMsg(self, uin, msg):

url = 'http://d.web2.qq.com/channel/send_buddy_msg2'

data = 'r=%7B%22to%22%3A'+uin+'%2C%22face%22%3A237%2C%22content'+urllib.quote(r'":"[\"'+msg+r'\",\"\\n【提示:此用户正在使用shift webQq】\",[\"font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]","')+'msg_id%22%3A13190001%2C%22clientid%22%3A%22'+self.clientid+'%22%2C%22psessionid%22%3A%22'+self.result['result']['psessionid']+'%22%7D&clientid='+self.clientid+'&psessionid='+self.result['result']['psessionid']

req = urllib2.Request(url, data)

#req.add_header('Cookie', self.mycookie)

req.add_header('Referer', 'http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=2')

print urllib2.urlopen(req).read()

pass

def sendQunMsg(self, uin, msg):

url = 'http://d.web2.qq.com/channel/send_qun_msg2'

data = 'r=%7B%22group_uin%22%3A'+uin+'%2C%22face%22%3A237%2C%22content'+urllib.quote(r'":"[\"'+msg+r'\",\"\\n【提示:此用户正在使用shift webQq】\",[\"font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]","')+'msg_id%22%3A13190001%2C%22clientid%22%3A%22'+self.clientid+'%22%2C%22psessionid%22%3A%22'+self.result['result']['psessionid']+'%22%7D&clientid='+self.clientid+'&psessionid='+self.result['result']['psessionid']

req = urllib2.Request(url, data)

req.add_header('Referer', 'http://d.web2.qq.com/proxy.html?v=20110331002&callback=1&id=2')

print urllib2.urlopen(req).read()

pass

def main():

user = raw_input('QQ:')

pwd = getpass.getpass('password: ')

qq = webqq(user, pwd)

qq.getSafeCode()

qq.loginGet()

qq.loginPost()

qq.getGroupList()

qq.getFriend()

while 0:

time.sleep(0.5)

qq.poll2()

for i in range(100):

print 'to', qq.friend['result']['info'][0]['uin']

print 'to', qq.group['result']['gnamelist'][10]

#qq.sendMsg(str(qq.friend['result']['info'][0]['uin']), 'clientjsfzhiyong')

ms = ''

for _ in xrange(i):

ms += '。'

qq.sendQunMsg(str(qq.group['result']['gnamelist'][10]['gid']), ms)

#qq.sendMsg('2236071402', 'geisf')

if __name__ == "__main__":

main()

python qq协议_利用webqq协议使用python登录qq发消息源码参考相关推荐

  1. python自动登录qq空间_python 利用splinter组件,自动登录QQ空间

    1.需要下载splinter 2.下载chromedriver放在/usr/bin目录下 #!/usr/bin/env python import sys import time from splin ...

  2. python控制电机_利用树莓派控制步进电机——Python语言

    步进电机的优点在于它能够被精确定位,正向或反向一次性转动"一步",并且也能够连续转动. #!/usr/bin/env python ######################## ...

  3. python代码覆盖率测试_利用coverage工具进行Python代码覆盖率测试

    Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率情况. Coverage安装 1.安装命令:pip install coverage 2.查看cov ...

  4. 内网环路怎么解决_利用生成树协议巧妙解决局域网二层环路

    [IT168 技术]本文主要介绍局域网交换技术,也称为层2交换技术,内容主要包括层2交换的工作原理.网络环路.如何利用Spanning-Tree Protocol 来解决网络环路.在介绍交换技术之前不 ...

  5. pythonsocket自定义协议_小渣渣学习笔记 python day28【tcp聊天 udp聊天 粘包 自定义协议 struct模块】...

    tcp 实现聊天功能 server端 import socket sk = socket.socket() sk.bind(('127.0.0.1',22000)) sk.listen() while ...

  6. python 下载qq群文件_利用多线程快速下载腾讯QQ群文件的方法

    引言: 众所周知,用QQ客户端下载QQ群文件的速度实在是缓慢,这里讲一下如何利用多线程快速下载腾讯QQ群文件. 原始事件发生在2018年8月4日,笔者的同学制作了一个毕业短片并且将其上传到了班级的QQ ...

  7. python dos攻击_利用SMB漏洞DoS攻击任何Windows系统

    原标题:利用SMB漏洞DoS攻击任何Windows系统 近日微软报出SMB V1存在漏洞,安全研究员并将此漏洞称作 " SMBLoris ",解释其能够发动拒绝服务(Dos)攻击, ...

  8. igmp是哪个层协议_通俗易懂网络协议(IP)

    之前写过一篇<通俗易懂TCP/IP(概述)>,广受欢迎和好评,有网友催更,便抽空续写IP章节,回应粉丝期待. TCP/IP网络模型 TCP/IP网络模型分为4层,自下而上分布为链路层(又叫 ...

  9. 如何用python抓取qq音乐_手把手教你使用Python抓取QQ音乐数据

    [一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. [二.需要的库] 主要涉及的库有:requests.json ...

  10. python eel 多线程_利用Eel使JavaScript调用Python程序

    利用Eel使JavaScript调用Python程序 Eel简介 Eel是一个轻量的python桌面GUI开发第三方库, 它使用HTML/JS作为界面开发语言, 但是能够访问所有的python功能, ...

最新文章

  1. 中科院韩先培:预训练模型怎样成为下一代知识图谱
  2. asp.net C#压缩打包文件例子
  3. 菜鸟笔记(一) - Java常见的乱码问题
  4. Spring IoC 学习(3)
  5. Android串口编程--开关灯Demo(附源码)
  6. 计算机软件中级职称 入职,计算机职调称论文.doc
  7. float与double类型参数区别_8大基本数据类型及包装类,不知道这些点别说自己是大佬...
  8. linux系统死机窗口移动不了怎么办,Linux 操作系统死机故障处理方法总结
  9. java web 邮件_JavaWeb -- 邮件收发
  10. hadoop安装笔记-cdh4
  11. 序列化(串行化)- 使用BinaryFormatter进行序列化
  12. android绑定服务空指针,android aidl问题空指针的问题
  13. 【choco 安装】chocolatey 安装步骤包管理工具
  14. 用代码绘制简单的图形
  15. 42V转5V,42V转3.3V,42V转3V的降压芯片和LDO芯片的集合
  16. rhce8的rh294练习环境
  17. 次世代建模是什么?学到什么程度才能接单赚钱
  18. android开发 问卷调查案例_安卓 问卷调查Demo 原生代码
  19. Linux syslog进程退出日志审计
  20. mysql查询学校开设总课程数_MYSQL数据库课程设计

热门文章

  1. 10 个用于网络管理员进行高级扫描的端口扫描工具
  2. dbgView的使用
  3. windows 超简单实现多用户远程桌面,RDP WRAPPER
  4. 关于zlog库的快速使用教程
  5. arcgis-拓扑检查-model
  6. python http通信接口开发
  7. 关于一段式、两段式、三段式状态机
  8. QGIS 3初级到高级
  9. unity3d贪吃蛇游戏源码,支持安卓+IOS双端 unity2019 C#语言开发
  10. typroa 思维导图_Markdown转思维导图及Typora导出opml(pandoc)