當前位置:首頁 » 編程語言 » 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 17:33:16 瀏覽:925
海量伺服器怎麼拆 發布:2025-05-16 17:31:07 瀏覽:210
運行與編譯的區別 發布:2025-05-16 17:25:02 瀏覽:823
c語言for中continue 發布:2025-05-16 17:20:14 瀏覽:647
ftp儲存 發布:2025-05-16 17:04:08 瀏覽:504
家悅3010怎麼看電腦配置 發布:2025-05-16 17:02:38 瀏覽:885
sqlin傳參 發布:2025-05-16 17:02:37 瀏覽:889
python計算md5 發布:2025-05-16 17:02:32 瀏覽:427
看演算法頭疼 發布:2025-05-16 16:56:41 瀏覽:798
給定文件編譯成dll文件 發布:2025-05-16 16:45:05 瀏覽:730