QQ API 接口

一、找尋支持 QQ HTTP 協議的服務器。 你們也許會被一些假像所迷惑,也許會認爲 QQ 的 HTTP 服務器是基於 80  口進行通訊的(如:218.17.209.23: 80) ,其實否則,正真基於 HTTP 的服務器應該是:http:  //tqq.tencent.com:8000, 它是一個經過 8000 口進行 通信的服務器。 因爲 QQ 的 HTTP 服務器並不支持 HTTP 協議中  GET 方 法, 它支持 POST 方法。 因此咱們要給 QQ 的 HTTP 協議 傳參數,那麼就必須要用 POST 方式才行。程序員

二、C#和 DELPHI  是實現 HTTP 的 POST 方法的通訊。 C#: C#裏 System.Web 空間下提供了一個叫作 WebClien t 的對象, 使用此對象就可使  C#直接對服務器發送 WE B 客戶端的請求。 那麼咱們要對服務器提交 POST 方法那 麼就必須使用其 UploadData()方法才行。首先把要請求  的信息先轉換爲字節(由於 POST 提交的是字符的流數 據) ,而後再作爲 UploadData()的參數。使用 UploadD  ata()進行數據提交,最後返回,POST 的回饋信息。如 下: WebClient _client = new WebClient(); string  postValues = "VER=1.0&CMD=Query_S  tat&SEQ=12321&UIN=29501213&TN=50&UN= 0"; Byte[] byteArray =  System.Text.Encoding.ASC II.GetBytes(postValues); Byte[] pageData =  _client.UploadData(Host,"P OST",byteArray); 這樣,咱們就利用 C#進行了一次 HTTP 的 POST 方法  提交了。
值在傳入、返回時,其是基於 UTF-8 進行的,C#顯示 中文是很常. 算法

三、實現 QQ 的用戶登陸。 在 QQ  通訊中用戶必須要登陸後才能夠進行互相發送信 息等。QQ 的登陸是很關鍵的,你們所看到的用戶在線, 並非用戶的 QQ 一直鏈接着服務器,而是定時發送消  信給服務器,證實本身還連着線,若是超出時間 QQ 就 認爲用戶已經掉線了。 在登陸協議中, 的密碼是用標準的 MD5 來進行加密, QQ 而  C#自已帶有,可是直接用不了,必需進行處理後,才 能使其變成標準的 MD5,處理代碼以下:
public static string MD5(string  toCryS tring) { MD5CryptoServiceProvider hashmd5; hashmd5 = new M  D5CryptoServiceProvider(); return BitConverter.ToString(hashmd5.ComputeH  ash(Encoding.Default.GetBytes(toCryString))).Re place("-","").ToLower();//asp  是小寫,把全部字符變 小寫 } 瞭解 QQ 是如何對用戶密碼加密後,那麼咱們就開始真 正,解析 QQ 的 HTTP 登陸協議了,咱們把協議當傳 PO ST  的參數傳給服務器,而服務器則回饋相應的信息給客 戶端:  傳入協議:
VER=1.1&CMD=Login&SEQ=&UIN=&PS=&M5  =1&LC=9326B87B234E7235 VER 是用來講明 QQ 協議的版本,CMD 是說明協議的 命令,Login 就是指 QQ  的登陸了,SEQ 是他的爲了防 止重複發送而設定的一個標記,通常咱們取當前時間數 值的一段放入便可。(C#:DateTime.Now.Ticks.To  String().Substring(7,7) DELPHI:CopyStr(inttost r(GetTickCount()),1,5)),UIN  是說明你當前要登陸 的用戶 QQ 號,PS,是 MD5 加密事後的密碼的值。 返回協議:  VER=1.1&CMD=Login&SEQ=11281&UIN=&RE  S=0&RS=0&HI=60&LI=300(成功) RES 爲 0 表示成功返回,RS 爲 0 表示登陸成功。  VER=1.1&CMD=Login&SEQ=11422&UIN=315  103947&RES=0&RS=1&RA=登陸失敗 RS 爲 1 表示登陸失敗, 那麼就會出現提示信息 RA 說明  緣由。
四、得到 QQ 名單。 若是您加了您的好友,那麼您的好友就會放入你的 QQ 的好友名單裏面,那麼咱們要獲得 QQ 名單就必需給 Q Q  服務器發送獲得好友名單的協議(我就不從復已知的 參數了):  VER=1.1&CMD=List&SEQ=&UIN=&TN=160&U N=0 服務器獲得協議後若是成功則返回:  VER=1.1&CMD=LIST&SEQ=43661&UIN=2950  1213&RES=0&FN=1&SN=24&UN=561256,1943 497,....
UN 後面則是您好友的 QQ  號碼,每一個號碼都由,進行分 開。那麼咱們只須要獲得 UN 後面的代碼,把它列表化 就 OK 了。C#能夠用 string.Split(',')把值放入列表進  行處理,而 DELPHI 可使用 Split()把數值放入 TStri ngs 裏進行處理。服務器

五、得到 QQ 好友在線名單 得到 QQ  好友在線名單,跟得到好友名單差很少,惟一 不一樣的是用的命令不一樣用的是 Query_Stat,協議以下:  VER=1.1&CMD=Query_Stat&SEQ=&UIN=&TN =50&UN=0  服務器獲得協議後若是成功則返回: VER=1.1&CMD=QUERY_STAT&  SEQ=-1&UIN=29501213&RES=0&FC=141,270,2  70,&FN=1&SN=3&ST=10,10,10,&UN= FC 爲 QQ 頭像的的 ID, 如的頭像 ID 爲 270,  那麼其頭 使用的圖片爲 91.bmp,其算法爲 ID/3+1。ST 爲 QQ 用戶的狀態,10 爲上線,20 爲離線,30 爲忙碌。UN 爲在線用戶的 QQ  號,NK 爲在線用戶的 QQ 暱稱。ST, UN,NK,每一個逗號隔開的數據相互對應。網絡

六、獲得 QQ 用戶的信息。 若是要看到 QQ  用戶的真實名稱,MAIL,年齡,我的說 明等信息,那麼咱們必須要向服務器發送獲得好友信息 的信息:  VER=1.1&CMD=GetInfo&SEQ=&UIN=&LV=2& UN= UN 爲要查看用戶信息的 QQ 號。  服務器獲得協議後若是成功則返回:
VER=1.1&CMD=GETINFO&SEQ=12707&UIN=4  15103947&RES=0&AD=雲南昆明&AG=0&EM=Mi  croprogramer@hotmail.com&FC=270&HP=msg  er.org(建設中...)&JB=程序員&LV=2&PC=650000 & PH=0871-6466529&PR=網絡爲媒%252c 關係爲 本%252c 信息爲財%252c 客戶爲主.%0d%0a&PV=  雲南省&RN=劉 X&SC=社會大學&SX=0&UN=2425 9132&NK=微程 AD 用戶的聯繫地址,AG  爲用戶年齡,EM 爲用戶 MAI L,FC 爲用戶頭像,HP 爲用戶網站,JB 爲用戶職業,P C 爲用戶郵編,PH 爲用戶聯繫電話,PR 爲用戶簡介,P V  爲用戶因此的省,RN 爲用戶真實名稱,SC 爲用戶畢 業院校,SX 爲用戶性別,UN 爲用戶 QQ 號,NK 爲用 戶 QQ 暱稱。 七、增長 QQ 好友。  想要新增好友,就要發送 AddToList 命令給服務器,具 體命令以下:  VER=1.1&CMD=AddToList&SEQ=&UIN=&UN= UN 爲咱們要增長用戶的 QQ 號。  服務器獲得協議後若是成功則返回: VER=1.1&CMD=AddToList&SEQ=13666&UIN=4  15103947&RES=0&CD=0&UN=24259132 CD 爲被加 QQ 的身份驗證狀態,CD 爲 0 表示「容許任  何人把我列爲好友」,CD 爲 1 表示「須要身份證認才能 把我列爲好友」,CD 爲 3 表示「不容許任何人把我列爲 好友」。若是 CD 爲 0  那麼信息回饋後,用戶就直接加 爲好友了, 若是 CD 爲 1, 那麼還要發送一次迴應加爲好 友的響應。ide

  八、迴應加爲好友的響應。
迴應加爲好友響應是雙方的:一、若是你發送了請求加對 方爲好友,若是對方須要驗證,那麼必需發送迴應加爲  好友的響應。二、若是對方發送加爲好友請求給你,那麼 你能夠加應加爲好友的響應,一是加爲好友,一是經過 驗證,一是拒決加爲好友。咱們要向服務器發送命令:  VER=1.1&CMD=Ack_AddToList&SEQ=&UIN=&U N=&CD=&RS= CD 爲響  應狀態,CD 爲 0 表示「經過驗證」 。CD 爲 1 表示「拒決 加爲對方爲好友」 CD 爲 2 表示 。 「爲請求對方加爲好友」 。 RS  爲你要請求的理由. 服務器獲得協議後若是成功則返回: VER=1.1&CMD=Ack_AddToList&SEQ=1130&UI  N=415103947&RES=0& 工具

九、刪除好友。 刪除好友其實很容易,向服務器發送 DelFromList 命令 則能夠刪除用戶:  VER=1.1&CMD=DelFromList&SEQ=&UIN=&UN = UN 爲要刪除用戶的 QQ 號。  服務器獲得協議後若是成功則返回: VER=1.1&CMD=DelFromList&SEQ=24514&UIN  =415103947&RES=0&post

十、改變用戶當前狀態。 能夠把 QQ 設置爲在線,隱身等狀態,咱們能夠發送 Ch ange_Stat  給服務器以改變當前狀態,具體命令以下: VER=1.1&CMD=Change_Stat&SEQ=&UIN=&ST =
ST  爲要改變的狀態,10 爲上線,20 爲離線,30 爲忙 碌。 服務器獲得協議後若是成功則返回:  VER=1.1&CMD=Change_Stat&SEQ=17512&UIN =415103947&RES=0&  網站

十一、退出登陸 要退出登陸,要向服務器發送命令 Logout,具體命令如 下: VER=1.1&CMD=Logout&SEQ=&UIN=  服務器獲得協議後若是成功則返回: VER=1.1&CMD=LOGOUT&SEQ=15803&UIN=41  5103947&RES=0 加密

十二、得到好友 QQ 的消息 若是要接收好友的消息, 要向服務器發送命令 GetMsgE x,具體命令以下:  VER=1.1&CMD=GetMsgEx&SEQ=&UIN= 服務器獲得協議後若是成功則返回:  VER=1.1&CMD=GETMSGEX&SEQ=56661&UIN=  29501213&RES=0&MN=3&MT=99,9,9,&UN=24  259132,24259132,24259132,&MG=30 ,asdfasd fasdfasdf ,asdfasdfasdf ,& MT  表示消息類型,99 表示系統消息,9 表示用戶消息。 UN 表示消息發送來源用戶,MG 表示發送的消息,MG 消息能夠表示某些特定的系統含意, 譬如: MT 爲  99, 當 MG 爲 30, 爲 24259132 則表示用戶 4259132 現 UN 在處於忙碌狀態,可根據此消息進行好友列表的刷新, 提升效率。  對象

1三、向好友 QQ 發送消息要發送消息給好友,要向服務器發送命令 CLTMSG 命 令,具體命令以下:  VER=1.1&CMD=CLTMSG&SEQ=&UIN=&UN=&M G= UN 爲消息發送給的用戶 QQ 號碼, MG  爲發送給該用戶 的消息。 服務器獲得協議後若是成功則返回: VER=1.1&CMD=CLTMSG&SEQ=15  803&UIN=415103947&RES=0 好了,以上就是 QQ 基於 HTTP 的一個不徹底的協議分  析,利用以上協議您就能夠實現不少東西,如:QQ 機器 人,QQ 廣告系統,即時通信的整合工具等等 QQ 協議網絡協議--請求部份//登陸  VER=1.0&CMD=Login&SEQ=&UIN=&PS=&M5=  1&LC=9326B87B234E7235 //獲取消息 VER=1.0&CMD=GetMsgEx&SEQ=&UIN=  //發送消息 VER=1.0&CMD=CLTMSG&SEQ=&UIN=&UN=&M G= //朋友列表  VER=1.0&CMD=List&SEQ=&UIN=&TN=160&UN =0 //獲取好友狀態  VER=1.0&CMD=Query_Stat&SEQ=&UIN=&TN= 50&UN=0//獲取好友信息  VER=1.0&CMD=GetInfo&SEQ=&UIN=&LV=2&U N= //增長好友  VER=1.0&CMD=AddToList&SEQ=&UIN=&UN= //迴應對方請求加你爲好友的響應  VER=1.0&CMD=Ack_AddToList&SEQ=&UIN=&U N=&CD=&RS= //刪除好友  VER=1.0&CMD=DelFromList&SEQ=&UIN=&UN = //搜索好友  VER=1.0&CMD=Finger&SEQ=&UIN=&AG=&SX =&PV= //改變本身狀態,ST  的代碼應該和獲取好友狀態代碼一 致 VER=1.0&CMD=Change_Stat&SEQ=&UIN=&ST = //退出登陸  VER=1.0&CMD=Logout&SEQ=&UIN=

相關文章
相關標籤/搜索