本篇主要是: 发送QQ消息(to:好友,群)
,以及对小黄鸡抓包
利用它的语言库
本文是WebQQ流程的最后一章
最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下
前面几个demo
我已经上传到对应页面的尾部
,剩下的会抽时间补,外包经常加班且没外网,尽量本周
弄完
全系列预计会有这些步骤,当然某些步骤可能会合并:
- 验证码
- 第一次登陆
- 第二次登陆
- 保持在线和接收消息
- 获取好友和群列表
- 发送消息
- 变成智能的(*゚∀゚*)
回顾基础 一般抓包模拟请求的方式
熟悉流程:
- 在页面上普通操作,熟悉基本的操作过程
- 打开抓包软件(httpwatch,IE9+,FF,Chrome),再到页面操作一遍,根据功能和请求把整体分为各个步骤
- 对应每一个步骤,多次操作,了解每一步需要的http请求,不断模拟每一次的请求该步骤
注意事项:
- 敏感页面需要保存
Cookie
- 查找请求的
参数
,这个我喜欢用IE9+,可以从cookie,返回正文里面搜索.Chrome我没有找到这个功能. 即参数可能来源
Cookie,或者页面,或者某次返回值内等等 - 请求的
referer
- 多次模拟请求某个域后接下来突然失败,代码找不到错误?
换个IP
试试 - 万变不离其宗,当你实在不知道哪里有问题的时候,去跟浏览器比比看,总之跟浏览器一样是准没错的
Tips WebQQ中是无法取得好友QQ号码的
每个好友在你本次登陆
后,都会生成一个当前唯一的uid码给你,群的是gid,前篇文章中已经介绍了
在你关闭网页前,你跟好友、群所有的信息交互,都要通过这个唯一码。所以上一步中需要储存好友的信息,来识别poll得到的消息,是从哪里来,谁说的
发送消息也是,你想要跟谁说,这个唯一的标识即为上述的uid
或者gid
开始 发送消息
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到现在才发上来
年前一段时间,房东的客厅被房产局带领执法队强拆了 =。= .... 那段时间没电,特照相留念
本步骤的demo,一步一步来做WebQQ机器人-(五)(发送消息||完结),更新于2015/2/26
因为hash算法和加密算法修改,新demo,更新与2015/4/8 2015/4/8 WEBQQ
TX每过一段时间就会变更一下算法,以后的更新就交给大家啦 。。。
转载请保留本页链接:http://www.cnblogs.com/lianmin/p/4257421.html
.
一步一步来做WebQQ机器人-(五)(发送消息||完结)的更多相关文章
-
一步一步来做WebQQ机器人-(四)(获取好友列表和群列表)
× 本篇主要是: 获取好友列表,群列表 我会尽量详细一点,尽我所知的分享一些可能大家已经掌握的或者还不清楚的经验 利于大家阅读,文章样式不再复杂化,根据内容取固定色 目前总进度大概65% 全系列预计会 ...
-
一步一步来做WebQQ机器人-(三)(登录QQ并保持在线)
× 本篇的目的是让你的QQ真正的上线:挤下你的PCQQ,和让好友状态栏显示webqq在线 目前总进度大概50% 全系列预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在 ...
-
一步一步来做WebQQ机器人-(二)(第一次登陆)
// 预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*゚∀゚*) webqq的登陆,分为2步,本文主要讲第一次 ...
-
一步一步来做WebQQ机器人-(一)(验证码)
× Well done! 为了探究webqq的http请求流程和数据交互,我付出了很多心血. 写下这篇文章!!!这是我逝去的青春 系列写完之后我会把源码打包奉上~ ------我的征途是星辰大海 预计 ...
-
web开发之web 验证码--- webqq 机器人
一步一步来做WebQQ机器人-(一)(验证码) http://www.cnblogs.com/lianmin/p/4231340.html http://www.cnblogs.com/liulun/ ...
-
一步一步教你做ios推送
最近在研究ios的推送问题,遇到了一些问题,最终整理了一下.放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服 ...
-
Ace教你一步一步做Android新闻客户端(一)
复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...
-
Cocos2d-x 3.1 一步一步地做改编
本文并不想谈论的屏幕改编或真理的概念.假设不知道cocos2d-x的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.ht ...
-
一步一步带你做WebApi迁移ASP.NET Core2.0
随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...
随机推荐
-
SqlServer中的自增的ID的最后的值:
SqlServer中的自增的ID的最后的值: SELECT SCOPE_IDENTITY() --返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值.SELECT @@I ...
-
缩进, Tab 还是空格?(转)
圣战 圣战个毛线 Android 好还是 iOS 好,Windows 好还是 Mac 好,编辑器好还是 IDE好,中划线好还是下划线好…写代码这么多年,会遇到很多奇葩的毫无意义的所谓脑残粉的争论 昨天 ...
-
GBDT(Gradient Boosting Decision Tree)算法&;协同过滤算法
GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理 ...
-
Scrapy研究和探索(七)——如何防止被ban大集合策略
说来设置的尝试download_delay少于1,不管对方是什么,以防止ban策略后.我终于成功ban该. 大约scrapy利用能看到以前的文章: http://blog.csdn.net/u0121 ...
-
用Iconv应对NodeJs对称加密技术在汉字编码与NoSQL的一些坑洞
·起因 汉字编码技术在实际应用中总是会存在这样或者那样的问题,尤其是在一些热门NoSQL方面多少会遇到挑战.比方说Cassandra字符集还不直接支持GB2312,要想存储写汉字那可真是麻烦.当然这还 ...
-
prometheus监控示例
prometheus架构图 prometheus 各组件介绍 Prometheus Server: 使用pull方式采集监控数据,在该组件上配置监控数据的采集和告警规则. Client Library ...
-
揭秘VxWorks——直击物联网安全罩门
转载:http://chuansong.me/n/1864339 VxWorks是美国风河(WindRiver)公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键 ...
-
LOJ.#6468. 魔法[差分+树状数组]
题意 题目链接 分析 将询问差分并不断加入颜色. 每种颜色,一个位置 \(p\) 都只会走到与之左右相邻的两个位置之一,分类讨论 \(\rm |A-B|\) 的符号. 实现可以使用树状数组. 总时间复 ...
-
【Mac常用shell】
1. 杀掉占用某端口的进程: lsof -i:9000 -> 确认PID kill PID 2. 环境变量: 直接用{PATH}:路径 的办法,经常不好用,我的解决办法: vi ~/.bas ...
-
Tweepy1——抓取Twitter数据
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...