×

本篇主要是: 发送QQ消息(to:好友,群),以及对小黄鸡抓包利用它的语言库

本文是WebQQ流程的最后一章

最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下

前面几个demo我已经上传到对应页面的尾部,剩下的会抽时间补,外包经常加班且没外网,尽量本周弄完

目前总进度大概100%

全系列预计会有这些步骤,当然某些步骤可能会合并:

  • 验证码
  • 第一次登陆
  • 第二次登陆
  • 保持在线和接收消息
  • 获取好友和群列表
  • 发送消息
  • 变成智能的(*゚∀゚*)

回顾基础 一般抓包模拟请求的方式

熟悉流程:

  • 在页面上普通操作,熟悉基本的操作过程
  • 打开抓包软件(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在后来我测试是没用的...

×Close

到目前为止,所有内容已经完毕

各个章节demo尽快补全

使用C#模拟http请求可以参考猛戳这里

您有没有对这篇文章感兴趣呢?

还好啦 WQNMLGB

抱歉最后一个demo到现在才发上来

年前一段时间,房东的客厅被房产局带领执法队强拆了 =。= .... 那段时间没电,特照相留念

一步一步来做WebQQ机器人-(五)(发送消息||完结):点击下载

本步骤的demo,一步一步来做WebQQ机器人-(五)(发送消息||完结),更新于2015/2/26

因为hash算法和加密算法修改,新demo,更新与2015/4/8 2015/4/8 WEBQQ

TX每过一段时间就会变更一下算法,以后的更新就交给大家啦 。。。

转载请保留本页链接:http://www.cnblogs.com/lianmin/p/4257421.html

.

一步一步来做WebQQ机器人-(五)(发送消息||完结)的更多相关文章

  1. 一步一步来做WebQQ机器人-(四)(获取好友列表和群列表)

    × 本篇主要是: 获取好友列表,群列表 我会尽量详细一点,尽我所知的分享一些可能大家已经掌握的或者还不清楚的经验 利于大家阅读,文章样式不再复杂化,根据内容取固定色 目前总进度大概65% 全系列预计会 ...

  2. 一步一步来做WebQQ机器人-(三)(登录QQ并保持在线)

    × 本篇的目的是让你的QQ真正的上线:挤下你的PCQQ,和让好友状态栏显示webqq在线 目前总进度大概50% 全系列预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在 ...

  3. 一步一步来做WebQQ机器人-(二)(第一次登陆)

    // 预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*゚∀゚*) webqq的登陆,分为2步,本文主要讲第一次 ...

  4. 一步一步来做WebQQ机器人-(一)(验证码)

    × Well done! 为了探究webqq的http请求流程和数据交互,我付出了很多心血. 写下这篇文章!!!这是我逝去的青春 系列写完之后我会把源码打包奉上~ ------我的征途是星辰大海 预计 ...

  5. web开发之web 验证码--- webqq 机器人

    一步一步来做WebQQ机器人-(一)(验证码) http://www.cnblogs.com/lianmin/p/4231340.html http://www.cnblogs.com/liulun/ ...

  6. 一步一步教你做ios推送

    最近在研究ios的推送问题,遇到了一些问题,最终整理了一下.放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服 ...

  7. Ace教你一步一步做Android新闻客户端(一)

    复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...

  8. Cocos2d-x 3.1 一步一步地做改编

    本文并不想谈论的屏幕改编或真理的概念.假设不知道cocos2d-x的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.ht ...

  9. 一步一步带你做WebApi迁移ASP.NET Core2.0

    随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...

随机推荐

  1. mysql锁SELECT FOR UPDATE【转】

    MySQL 使用SELECT ... FOR UPDATE 做事务写入前的确认 以MySQL 的InnoDB 为例,预设的Tansaction isolation level 为REPEATABLE ...

  2. java入门 第三季4

    java集合框架中 java集合框架下

  3. 初学Redis(1)——认识Redis

    Redis官网对Redis的定义是:“Redis is an open source, BSD licensed, advanced key-value cache and store”,可以看出,R ...

  4. .NET LINQ 限定符操作

    限定符操作      限定符运算返回一个 Boolean 值,该值指示序列中是否有一些元素满足条件或是否所有元素都满足条件. 方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表 ...

  5. Caffe初试(三)使用caffe的cifar10网络模型训练自己的图片数据

    由于我涉及一个车牌识别系统的项目,计划使用深度学习库caffe对车牌字符进行识别.刚开始接触caffe,打算先将示例中的每个网络模型都拿出来用用,当然这样暴力的使用是不会有好结果的- -||| ,所以 ...

  6. MyBatis持久层框架使用总结

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2 ...

  7. c#关于类的继承

    public class D { public virtual void Run(string name) { Console.WriteLine(name + ",good"); ...

  8. Sublime text 3安装Emmet

    这是Sublime text 3不是2的版本,两者的安装还是有区别的,下面的方法是我感觉比较简单的,其他的要命令什么的感觉太复杂了,经测试是OK的. 先关闭Sublime text 3: 第一步:下载 ...

  9. .NET开发者如何愉快的进行微信公众号开发

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这篇文章只是一个如何提高开发效率的简单指导和记录,不会涉及具体的微信公众号开发内容. ...

  10. csc.rsp Nuget MVC/WebAPI、SignalR、Rx、Json、EntityFramework、OAuth、Spatial

    # This file contains command-line options that the C# # command line compiler (CSC) will process as ...