一步一步來作WebQQ機器人-(五)(發送消息||完結)

本篇主要是: 發送QQ消息(to:好友,羣),以及對小黃雞抓包利用它的語言庫javascript

本文是WebQQ流程的最後一章html

最後一章內容很少但我仍是囉嗦,可能對大部分人都已知曉的流程方法我也會介紹一下java

前面幾個demo我已經上傳到對應頁面的尾部,剩下的會抽時間補,外包常常加班且沒外網,儘可能本週弄完web

目前總進度大概100%

全系列預計會有這些步驟,固然某些步驟可能會合並:

  • 驗證碼
  • 第一次登錄
  • 第二次登錄
  • 保持在線和接收消息
  • 獲取好友和羣列表
  • 發送消息
  • 變成智能的(*゚∀゚*)

熟悉流程:算法

  • 在頁面上普通操做,熟悉基本的操做過程
  • 打開抓包軟件(httpwatch,IE9+,FF,Chrome),再到頁面操做一遍,根據功能和請求把總體分爲各個步驟
  • 對應每個步驟,屢次操做,瞭解每一步須要的http請求,不斷模擬每一次的請求該步驟

注意事項:瀏覽器

  • 敏感頁面須要保存Cookie
  • 查找請求的參數,這個我喜歡用IE9+,能夠從cookie,返回正文裏面搜索.Chrome我沒有找到這個功能. 即參數可能來源Cookie,或者頁面,或者某次返回值內等等
  • 請求的referer
  • 屢次模擬請求某個域後接下來忽然失敗,代碼找不到錯誤?換個IP試試
  • 萬變不離其宗,當你實在不知道哪裏有問題的時候,去跟瀏覽器比比看,總之跟瀏覽器同樣是準沒錯的

 

 

每一個好友在你本次登錄後,都會生成一個當前惟一的uid碼給你,羣的是gid,前篇文章中已經介紹了cookie

在你關閉網頁前,你跟好友、羣全部的信息交互,都要經過這個惟一碼。因此上一步中須要儲存好友的信息,來識別poll獲得的消息,是從哪裏來,誰說的session

發送消息也是,你想要跟誰說,這個惟一的標識即爲上述的uid或者gidpost

 

Chrome這點好,能夠幫你拿到url轉碼以前的數據,還能幫你反序列化成對象。IE就只能看到轉碼以後的字符串了。測試

先把數據格式化看看:

r: {
    "to": 3088776308,
    "content": "[\"你在幹啥?\",[\"font\",{\"name\":\"宋體\",\"size\":10,\"style\":[0,0,0],\"color\":\"000000\"}]]",
    "face": 585,
    "clientid": 53999199,
    "msg_id": 38160001,
    "psessionid": "8368046764001d636f6e6e7365727665725f77656271714031302e3133332e34312e383400006a5800000425016e0400f36afba86d0000000a404c30634555727447716d000000287b74805042214d42b7fa4930eb31c8421c1e24bfe90f6b2f35e8221fb3b505f79a85d6b0a97a5252"
}ResponseHeadersviewsource

 

一會兒就明朗好多了,主要參數以下:

  • to:本次是發送給好友,這裏即爲好友的uin
  • content是消息正文和字體顏色樣式,在webqq中消息的換行是:\n
  • face大概枚舉的某個默認頭像
  • clientid是以前說過的,表明本人的一個id,固定不變的
  • msg_id 這裏要注意,它是一個8位數字的參數,在每次發送消息以後都會++自增1,不管好友仍是羣消息,都用的是這個值
  • psessionid 以前保存的QQ令牌

 

那麼咱們請求的post字符串就是:

                string postData = "{\"to\":" + uin
                    + ",\"content\":\"[\\\"" + content.Replace(Environment.NewLine, "\\\\n")
                    + "\\\",[\\\"font\\\",{\\\"name\\\":\\\"宋體\\\",\\\"size\\\":10,\\\"style\\\":[0,0,0],\\\"color\\\":\\\"000000\\\"}]]\",\"face\":549,\"clientid\":" + ClientID
                    + ",\"msg_id\":" + MsgId
                    + ",\"psessionid\":\"" + PSessionID
                    + "\"}";
                postData = "r=" + HttpUtility.UrlEncode(postData);

 

Http請求中的數據,通常是將鍵值對用"="相連,將每個鍵值對用"&"相連

並且會把每一個鍵值對的值進行url編碼,你可能會說,我不編碼也能用啊!固然大部分網站這樣沒問題,可是瀏覽器確實是這麼作的,儘可能跟瀏覽器保持一致能夠避免不少錯誤,好比這裏。

C#中進行url編碼通常用:HttpUtility.UrlEncode(string),須要引用System.Web

 

  • 請求的referer:http://d.web2.qq.com/proxy.html?v=20130916001&callback=1&id=2
  • 請求的url:http://d.web2.qq.com/channel/send_buddy_msg2
  • 請求成功後返回:{"retcode":0,"result":"ok"},注意,若是你的數據格式什麼的都正確,可是msg_id不對,也有可能返回這個,可是實際上消息沒有發送出去。TX會覺得你重複請求了,所以返回給你一個成功信息。

 

發送羣消息跟這個很相似,url見demo,其次post字符串有點小小的改動:

                string postData = "{\"group_uin\":" + uin
                    + ",\"content\":\"[\\\"" + content.Replace(Environment.NewLine, "\\\\n")
                    + "\\\",[\\\"font\\\",{\\\"name\\\":\\\"宋體\\\",\\\"size\\\":10,\\\"style\\\":[0,0,0],\\\"color\\\":\\\"000000\\\"}]]\",\"face\":549,\"clientid\":" + ClientID
                    + ",\"msg_id\":" + MsgId
                    + ",\"psessionid\":\"" + PSessionID
                    + "\"}";
                postData = "r=" + HttpUtility.UrlEncode(postData);

 

到此爲止webqq模擬請求流程已經分析完畢。

剩下幾章的demo我在本週陸續補齊.

下面咱們去抓抓小黃雞,回顧一下,順便讓你的webqq項目實現機器人功能。


我是結束的分割線


 

 

我想,這一張圖已經包含所有了吧,當我看到這個的第一反應就是:

無論有沒有用,先訪問一下這個頁面獲得cookie,而後帶上這個referer,照着這個網址,post這個字符串"para="+HttpUtility.UrlEncode("你在幹嗎?")

固然上面的cookie和referer在後來我測試是沒用的...

 

 

 

到目前爲止,全部內容已經完畢

各個章節demo儘快補全

使用C#模擬http請求能夠參考猛戳這裏

您有沒有對這篇文章感興趣呢?

 

年前一段時間,房東的客廳被房產局帶領執法隊強拆了 =。= .... 那段時間沒電,特照相留念

 

 

一步一步來作WebQQ機器人-(五)(發送消息||完結):

本步驟的demo,一步一步來作WebQQ機器人-(五)(發送消息||完結),更新於2015/2/26

由於hash算法和加密算法修改,新demo,更新與2015/4/8

TX每過一段時間就會變動一下算法,之後的更新就交給你們啦 。。。

轉載請保留本頁連接:http://www.cnblogs.com/lianmin/p/4257421.html

 

 

 

 

.

相關文章
相關標籤/搜索