QQ API 接口


1、找尋支持 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 方式才行。

2、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#顯示 中文是很常.

3、實現 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 說明  原因。
4、獲得 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 里進行處理。

5、獲得 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,每個逗號隔開的數據相互對應。

6、得到 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 昵稱。 7、增加 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, 那么還要發送一次回應加為好 友的響應。

  8、回應加為好友的響應。
回應加為好友響應是雙方的:1、如果你發送了請求加對 方為好友,如果對方需要驗證,那么必需發送回應加為  好友的響應。2、如果對方發送加為好友請求給你,那么 你可以加應加為好友的響應,一是加為好友,一是通過 驗證,一是拒決加為好友。我們要向服務器發送命令:  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&

9、刪除好友。 刪除好友其實很容易,向服務器發送 DelFromList 命令 則可以刪除用戶:  VER=1.1&CMD=DelFromList&SEQ=&UIN=&UN = UN 為要刪除用戶的 QQ 號。  服務器得到協議后如果成功則返回: VER=1.1&CMD=DelFromList&SEQ=24514&UIN  =415103947&RES=0&

10、改變用戶當前狀態。 可以把 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& 

11、退出登錄 要退出登錄,要向服務器發送命令 Logout,具體命令如 下: VER=1.1&CMD=Logout&SEQ=&UIN=  服務器得到協議后如果成功則返回: VER=1.1&CMD=LOGOUT&SEQ=15803&UIN=41  5103947&RES=0

12、獲得好友 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 在處於忙碌狀態,可根據此消息進行好友列表的刷新, 提高效率。 

13、向好友 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=


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM