本篇主要是: 发送QQ消息(to:好友,群)
,以及对小黄鸡抓包
利用它的语言库
本文是WebQQ流程的最后一章
最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下
前面几个demo
我已经上传到对应页面的尾部
,剩下的会抽时间补,外包经常加班且没外网,尽量本周
弄完
熟悉流程:
注意事项:
Cookie
参数
,这个我喜欢用IE9+,可以从cookie,返回正文里面搜索.Chrome我没有找到这个功能. 即参数可能来源
Cookie,或者页面,或者某次返回值内等等referer
换个IP
试试
每个好友在你本次登陆
后,都会生成一个当前唯一的uid码给你,群的是gid,前篇文章中已经介绍了
在你关闭网页前,你跟好友、群所有的信息交互,都要通过这个唯一码。所以上一步中需要储存好友的信息,来识别poll得到的消息,是从哪里来,谁说的
发送消息也是,你想要跟谁说,这个唯一的标识即为上述的uid
或者gid
Chrome这点好,可以帮你拿到url转码之前的数据,还能帮你反序列化成对象。IE就只能看到转码之后的字符串了。
先把数据格式化看看:
javascript">r: { "to": 3088776308, "content": "[\"你在干啥?\",[\"font\",{\"name\":\"宋体\",\"size\":10,\"style\":[0,0,0],\"color\":\"000000\"}]]", "face": 585, "clientid": 53999199, "msg_id": 38160001, "psessionid": "8368046764001d636f6e6e7365727665725f77656271714031302e3133332e34312e383400006a5800000425016e0400f36afba86d0000000a404c30634555727447716d000000287b74805042214d42b7fa4930eb31c8421c1e24bfe90f6b2f35e8221fb3b505f79a85d6b0a97a5252" }ResponseHeadersviewsource
一下子就明朗好多了,主要参数如下:
\n
注意
,它是一个8位数字的参数,在每次发送消息之后都会++
,自增1
,无论好友还是群消息,都用的是这个值
那么我们请求的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
http://d.web2.qq.com/proxy.html?v=20130916001&callback=1&id=2
http://d.web2.qq.com/channel/send_buddy_msg2
{"retcode":0,"result":"ok"}
,注意,如果你的数据格式什么的都正确,但是msg_id不对,也有可能返回这个,但是实际上消息没有发送出去。TX会以为你重复请求了,因此返回给你一个成功信息。
发送群消息跟这个很类似,唯一的区别就是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);
剩下几章的demo我在本周陆续补齐.
下面我们去抓抓小黄鸡,回顾一下,顺便让你的webqq项目实现机器人功能。
我是结束的分割线
我想,这一张图已经包含全部了吧,当我看到这个的第一反应就是:
不管有没有用,先访问一下这个页面得到cookie,然后带上这个referer
,照着这个网址,post这个字符串"para="+HttpUtility.UrlEncode("你在干嘛?")
当然上面的cookie和referer在后来我测试是没用的...
各个章节demo尽快补全
使用C#模拟http请求可以参考猛戳这里
您有没有对这篇文章感兴趣呢?
.