当前位置:首页 » 编程语言 » python发QQ

python发QQ

发布时间: 2022-04-26 00:49:13

A. python用UDP模拟QQ问题

这个问题很有意思!我也想了很久。如果大家了解UDP和TCP的区别。很多人会告诉你。TCP协议因为是可靠的!它会验证信息是否发送到目的地。而且TCP连接和断开时都会经过看似漫长3次握手。而UDP因为是不可靠的 它没有验证机制更没有什么握手打招呼!我们聊天肯定希望速度越快越好不要有延时,所以有很多人或许会告诉你UDP比TCP快得多!所以QQ用UPD。 这个从理论上讲是对的!但大家忽视了一个客观因素。也就是TCP的验证和3次握手到底能用多少时间,这里可以告诉你最多不会超过0.5秒也就是500毫秒 这个速度玩游戏的人都知道很慢了。如果说0.5秒你觉得我估计少了那么1秒怎么也够了吧 对于我们人来说1秒不是眨眼的功夫吗。所以说以上所说不是QQ使用UDP的原因,起码不是主要原因。(其实QQ也有验证机制,只不过这个验证机制是由应用层其他协议完成的)那么就要更深一层去探讨UDP和TCP 在传输上区别了。首先我个人认为最主要是UPD包比TCP包要少12个字节。12个字节差距虽然很微小 但量变到一定程度那就有质的变化。现在我们2M宽带理论256KB 每秒,就算200KB吧 等于1600个字节 大家可以算这个差距。还有一个更深层原因也就是UDP“素质”很差。TCP就很绅士。 为什么说UDP素质不高 是因为UDP就像马路那种见缝插帧的司机 谁也不让 拼了命往前冲 不管你路上有多挤 更不会去想维持一下次序。TCP就不会!一旦TCP觉得路上拥挤就会自觉降低发送速度 他会努力维护次序。这样一进一退差距就大了。所以我觉得这才是QQ使用UDP的主要原因!也似乎也符合腾讯一贯作风 呵呵 MSN使用TCP 就要慢一些 不信你可以试试

B. python可以写QQ软件吗

好多年前,delphi出1.0的时候,我是delphi狂热的爱好者。把贵阳市场上的所有delphi全买到。其实也只有几本。 后来2003年的时候,经过深思熟虑学习python,当时把北京市场上的所有python书都买到,也只有几本书。现在网上python的书估计有1个GB。


delphi特别好学,而python是不同的语言,它是脚本。 如果没有学过脚本语言开始会觉着怪。


我学过两个星期还不会编程,后来把它的所有library的帮助也看了一遍。最后才明白几个道理。

  1. library帮助就是最好的python教程了

  2. 学习编程需要从学习别人的程序开始。最后可以看看site-packages目录里的源码

  3. 多练习,建立自己的python学习笔记与库(又叫cookbook),这样会加速你的学习


大约用了几年时间,python已经熟悉到主要的库都背下来了。不过仍然有大部分的python领域我还没有涉及。不过足够用了。


python已经有一个webqq的封装版本,很简单,100行左右。在linux上常用。


如果写一套完成的qq,对于python来讲太容易了。 就相当于一个作业。很轻松,2-3天就做完了。客户端与服务端可以一起做。


python是很强大的,快速开发语言。某些方面比delphi快。不过界面方面delphi比python又强了几代。


C语言是一个基础学习语言。与python有很大关系。因为python与C可以很好的融合。 这是python的高级话题,开始的时候,C与python完全没有关系。后来你会交叉使用。


C语言是一个独立的语言,学习好有单独的用途,当然对于java, c++, 其它的三代语言学习都有帮助。但是对python的初学者没有特别的帮助 。

C. 怎么利用Python做一个即时通信软件呢,类似于QQ,能实现基本的聊天和文件传输功能

这个基本的聊天就是最基本的socket操作,python界面方面比较弱势,如果不用第三方库的话。

D. 如何用python登陆qq读取信息

一次偶然的机会我看见了一个群里的一个QQ号总是根据你所发的消息自动回复,当时很感觉到神奇,我知道可以模拟登录网站,没想到竟然也能模拟登录QQ,首先自己想到的就是如何实现模拟登录PC端的QQ, 开始研究了下,发现QQ所发送的包都很难理解。

于是就转到了网页版的QQ,因为在网页里可以捕获所有的请求从而更好的实现模拟功能!

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

打开登录界面的的时候

会捕捉到一个GET请求

其中uin是你的QQ号

返回值是 ptui_checkVC('1','','x00x00x00x00x00xa1x92x12');

其中1表示需要验证码 还有一种返回值 ptui_checkVC('0','!LJV','x00x00x00x00x00xa1x92x12') 这种表示是不需要的验证码的

[python]view plain

  • defCheckVerify(self,uin):

  • check="h"

  • check=check.replace('{uin}',uin)

  • pattern=re.compile("ptui_checkVC′(.∗)′,′(.∗)′,′(.∗)′;")

  • result=self.Get(check)

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

  • print'Step1:CheckVerify'

  • returnchecked

  • 获取验证码的方法

  • [python]view plain
  • defGetVerify(self):

  • #url='hage?&uin='+str(self.QQ)+'&aid=1002101&0.45644426648505'+str(random.randint(10,99))

  • verify="htqq.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请求

    这里面u代表账号 p代表密码 密码是经过一定算法加密的 verify是验证码

    加密算法如下

  • [python]view plain
  • defPasswordSecret(self,password,v1,v2,md5=True):

  • ifmd5==True:

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

  • length=len(password)

  • temp=''

  • foriinrange(0,length,2):

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

  • returnself.PCMd5(self.PCMd5(self.hex2asc(temp)+self.hex2asc(v2)).upper()+v1).upper()

  • #md5加密函数

  • defPCMd5(self,s):

  • h=hashlib.md5()

  • h.update(s)

  • returnh.hexdigest()

  • #16进制转字符

  • defhex2asc(self,s):

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

  • length=len(_str)

  • data=''

  • foriinrange(0,length,2):

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

  • returndata

  • 然后是登录部分代码

  • [python]view plain
  • defLogin(self,uin,pwd):

  • #获取参数

  • cheked=self.CheckVerify(uin)

  • #加密密码

  • #pwd=self.PasswordSecret(pwd,cheked[1],cheked[2])

  • #pwd=self.PasswordSecret(pwd,r'AAST',r'x00x00x00x00x00xa1x92x12')

  • loginurl="h&t=1&g=1&js_type=0&js_ver=10080&login_sig=YPD0P*&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','hin2.qq.com/cgi-bin/login?daid=164&target=self&style=5&mibao_css=m_webqq&appid=1003903&enable_qlogin=0&no_verifyimg=1&s_urlm%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'

  • forcinself.cj:

  • ifc.name=="ptwebqq":

  • self.ptwebqq=c.value

  • returnresult


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

    ptuiCB('0','0','ebqq_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

    然后进行第二次登录,这次才是真正的登录

    请求如下

  • 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-urlencoded

  • Cookie:o_cookie=455910092; RK=fMEaWEZ0Qc; ts_last=web2.qq.com/; ts_refer=www..com/; ts_uid=4588821804; pgv_pvid=914251705; pgv_info=ssid=s3525422600&pgvReferrer=; verifysession=h02LeYrtarkWBZeSu_czkiczeNSNlDm7V1mCm-**; ptui_loginuin=10588690; ptisp=cnc; ptcz=; ptwebqq=; pt2gguin=o0010588690; uin=o0010588690; skey=@gmEO6N2JD; p_uin=o0010588690; p_skey=cZ5*kS-_; pt4_token=1SyuJ39Eq6oKEwEhGIizeg__

  • Host:d.web2.qq.com

  • Origin:h

  • Referer:htttml?v=20110331002&callback=1&id=2

  • User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36

  • Form Dataview sourceview URL encoded

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

  • clientid:7963288

  • psessionid:null

  • 其中的ptwebqq就是刚才我们从cookie中获取的

    这部分代码是

  • [python]view plain
  • defLogin2(self):

  • try:

  • url="htel/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"]

  • returnretjson

  • exceptException,e:

  • print"Login2error"+str(e)

  • 第二次登陆成功后会返回一个

    '''{"retcode":0,
    "result":{
    "uin":10588690,
    "cip":1707901841,
    "index":1075,
    "port":59571,
    "status":"online",
    "vfwebqq":"85c31018d2",
    "psessionid":"85c31018d2",
    "user_state":0,
    "f":0
    }
    }'''

    这样的数据结构 其中0表示登陆成功

    需要把这写数据保存下来 后面进行操作需要

    登陆成功后我们就可以拉去群列表了

  • [python]view plain
  • #获取群列表信息

  • defGetGroupNameList(self,vfwebqq):

  • try:

  • url="h/get_group_name_list_mask2"

  • postdata="r=%7B%22vfwebqq%22%3A%22{$vfwebqq}%22%7D"

  • postdata=postdata.replace("{$vfwebqq}",vfwebqq)

  • ret=self.Post(url,postdata,QQRobot.HOST[1],QQRobot.REFERER[1],QQRobot.ORIGIN[1])

  • print'Step5:GetGroupList'

  • retjson=json.loads(ret)

  • retjson=retjson["result"]

  • self.grouplist=retjson

  • forgroupinself.grouplist['gnamelist']:

  • printgroup["code"],group["name"]

  • exceptException,e:

E. python3利用smtp登录qq邮箱发送邮件

QQ邮箱是需要ssl加密的,所以普通的这种方法不行。
可以网络‘python smtp ssl’ 看看

F. Python模拟发送QQ图片变黑色

因为图片的通透度设置错误。
mask在A上的中央是255全通透,他破坏了我们的150不通透,得到了全黑的显示。这里的通透应该与原图A通道相同,否则会破坏A通道通透度。
python在生活中可以实现提醒任务的功能,也可定时给好友、群、讨论组发送qq消息。

G. python 后端怎么将页面或者图片信息分享至微信好友、QQ、朋友圈

米菲命题基金命令你

H. Python重复发送QQ消息为什么只有一条

没试过,但是根据题主的描述,发送能成功收到一条,所以考虑两个方面因素:
1、结束有没有特别的包发送?(一般允许长文字的通讯协议都会有起始包和结束包)
2、重复发送包,可能会被腾讯的屏蔽机制所阻挡。

I. python用QQ企业邮箱给别人发邮件后找不到发送记录

你连接的是什么服务器?腾讯的企业邮箱标准smtp服务器是smtp.exmail.qq.com发送端口为25 不需要勾选ssl,而且是必须要使用邮箱完整地址和邮箱密码验证通过后才能发送的,你使用的这个脚本是不是哪块不完整导致的?

J. Python如何实现定时发送qq消息

因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据内容(提醒时间、提醒对象、提醒内容)设置定时任务——>给特定qq好友发送消息。
1.软件版本:
2.安装依赖环境
pymysql安装:pip install pymysql
qqbot安装:pip install qqbot

3.数据库操作
数据库操作非常简单,跟Java类似,自己去菜鸟教程看一下基础语法就好了。
4.配置qqbot登陆信息
也可以不配置,不配置的话就是每次扫码登陆,但这在Linux系统下不好用,我按说明将配置改成了每次将登陆二维码发到固定qq邮箱。qqbot模块在GitHub上,大家可以去看一下模块说明:qqbot
配置文件默认在用户目录下的.qqbot-tmp/v2.3.conf,linux下类似
相关推荐:《Python视频教程》
5. 自定义功能

6.入口主程序
7.其它
数据库结构:
dropdatabaseif exists info_db;
createdatabaseinfo_db defaultcharactersetutf8;
use info_db;
createtabletyschele_tb(
id int(11) auto_increment primarykey,
worktime timestampnotnull,
namevarchar(10) notnull,
content varchar(100) notnull
)engine=InnoDB auto_increment=1 defaultcharset=utf8;
以上就是循环发送qq消息的代码,以下是项目目录结构,其中一些没有出现的文件是自己测试所用,可以不用关心:
效果图:

热点内容
吃鸡低配置手机如何开极致画质 发布:2025-05-16 18:15:20 浏览:191
空密码访问 发布:2025-05-16 18:08:51 浏览:892
腾讯云服务器安全规则设置 发布:2025-05-16 17:51:33 浏览:650
k3服务器不可用怎么办 发布:2025-05-16 17:51:30 浏览:537
编辑html源码 发布:2025-05-16 17:45:45 浏览:65
边的存储方法 发布:2025-05-16 17:33:16 浏览:927
海量服务器怎么拆 发布:2025-05-16 17:31:07 浏览:211
运行与编译的区别 发布:2025-05-16 17:25:02 浏览:824
c语言for中continue 发布:2025-05-16 17:20:14 浏览:648
ftp储存 发布:2025-05-16 17:04:08 浏览:505