第五讲 smart qq poll包处理 以及 私聊 群聊消息收发
发送 poll包
public static void Login_PostPoll()
{
try
{
string url = "http://d1.web2.qq.com/channel/poll2";
string dat = "{\"ptwebqq\":\"#{ptwebqq}\",\"clientid\":53999199,\"psessionid\":\"#{psessionid}\",\"key\":\"\"}";
dat = dat.Replace("#{ptwebqq}", Login_ptwebqq).Replace("#{psessionid}", Login_Psessionid);
dat = "r=" + HttpUtility.UrlEncode(dat);
HTTP.Post_Async_Action action = Message_Get;
HTTP.Post_Async(url, dat, action);
}
catch (Exception) { Login_PostPoll(); }
}
#endregion
#region 接收到消息的回调函数
/// <summary>
/// 接收到消息的回调函数
/// </summary>
/// <param name="data">接收到的数据(json)</param>
private static bool Running = true;
public static void Message_Get(string data)
{
Task.Run(() => Login_PostPoll());
if (Running)
Task.Run(() => Message_Process(data));//这个是处理收到信息的另外一个方法具体处理 在源码
}
以上就是poll包的处理以及 收到的信息处理
接下来是 发送的

上面是发送的连接以及 发送后返回的 poll包信息。代码如下
/// <summary>
///
/// </summary>
/// <param name="type">私聊0 群聊1 讨论组2</param>
/// <param name="uin">uin</param>
/// <param name="messageToSend">消息</param>
/// <param name="auto"></param>
/// <returns></returns>
public static bool Login_Postsend_buddy_msg(int type, string uin, string messageToSend)
{
if (messageToSend.Equals("") || uin.Equals(""))
return false;
string[] tmp = messageToSend.Split("{}".ToCharArray());
messageToSend = "";
for (int i = 0; i < tmp.Length; i++)
if (!tmp[i].Trim().StartsWith("..[face") || !tmp[i].Trim().EndsWith("].."))
messageToSend += "\\\"" + tmp[i] + "\\\",";
else
messageToSend += tmp[i].Replace("..[face", "[\\\"face\\\",").Replace("]..", "],");
messageToSend = messageToSend.Remove(messageToSend.LastIndexOf(','));
messageToSend = messageToSend.Replace("\r\n", "\n").Replace("\n\r", "\n").Replace("\r", "\n").Replace("\n", Environment.NewLine);
try
{
string to_groupuin_did, url;
switch (type)
{
case 0:
to_groupuin_did = "to";
url = "http://d1.web2.qq.com/channel/send_buddy_msg2";
break;
case 1:
to_groupuin_did = "group_uin";
url = "http://d1.web2.qq.com/channel/send_qun_msg2";
break;
case 2:
to_groupuin_did = "did";
url = "http://d1.web2.qq.com/channel/send_discu_msg2";
break;
default:
return false;
}
string postData = "{\"#{type}\":#{id},\"content\":\"[#{msg},[\\\"font\\\",{\\\"name\\\":\\\"繁体\\\",\\\"size\\\":10,\\\"style\\\":[0,0,0],\\\"color\\\":\\\"000000\\\"}]]\",\"face\":#{face},\"clientid\":53999199,\"msg_id\":#{msg_id},\"psessionid\":\"#{psessionid}\"}";
postData = "r=" + HttpUtility.UrlEncode(postData.Replace("#{type}", to_groupuin_did).Replace("#{id}", uin).Replace("#{msg}", messageToSend).Replace("#{face}", SelfInfo.face.ToString()).Replace("#{msg_id}", rand.Next(10000000, 99999999).ToString()).Replace("#{psessionid}", Login_Psessionid));
string dat = HTTP.Post(url, postData, "http://d1.web2.qq.com/proxy.html?v=20151105001&callback=1&id=2");
return dat.Equals("{\"errCode\":0,\"msg\":\"send ok\"}");
}
catch (Exception)
{
return false;
}
}
这一讲费了很多时间,中间又去查了资料。特别是处理返回的 包的json ,不知道怎么格式化,只能替换出来,拿到想要的数据。
到现在为止,整个新手smart qq http 协议的教程 已经可以说完成了,因为这个协议的功能非常单一,并且很多都已经被TX去掉的,就像获取好友的 真实QQ也已经是报错的。接下来就可以做图形界面,还有部分业务了(qq机器人自动回复等)
第五讲 smart qq poll包处理 以及 私聊 群聊消息收发的更多相关文章
- 第六讲 smart qq C#开发总结
smart qqC#开发总结: 整个开发下来其实一点都不是很难,从一开始二维码 获取到最终的收发消息,基本上都是模拟浏览器的操作.都是基于http通讯.一下就是 本次新手学习http协议的最关键的一个 ...
- 第三讲 smart qq 登录成功后获取 vfwebqq ,psessionid,hash
public static void Login_GetPHV() { string urldata = "{\"ptwebqq\":\"#{ptwebqq}\ ...
- 第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码
新手教程: 前言:最近在看了一下很久很久以前做的qq机器人失效了,最近也在换工作目前还在职,时间很挺宽裕的.就决定从新搞一个web qq机器人 PC的协议解析出来有点费时间以后再做. 准备工作: 编译 ...
- 第四讲 smart qq 获取联系人信息 ,分组 好友 群聊
首先从post一下 http://s.web2.qq.com/api/get_user_friends2 这个链接获取分组categories ,好友信息 friends,info. string ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 给自己的QQ群开启腾讯官方的群聊机器人
看到腾讯有个机器人还不错 能聊天 能唱歌 方法:1.点击链接填写https://wj.qq.com/s/946969/64ac 群聊机器人内测邀请.按照提示填就行了 2.然后就是开启机器人了 http ...
- 二进制包部署Kubernetes集群
今天这篇文章教给大家如何快速部署一套Kubernetes集群.K8S集群部署有几种方式:kubeadm.minikube和二进制包.前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包 ...
- wireshark抓取qq数据包
抓包接口设置成本地连接 点击start,登录qq,输入oicq进行过滤qq包 找到第一个OICQ,点击后,点击oicq-IM software 可以看到自己登录的QQ号码为765343409 本机IP ...
- 360浏览器7.1抓触屏QQ空间包
随机推荐
- 用apache和tomcat搭建集群,实现负载均衡
型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问 ...
- [翻译] Visual Studio 2019: 极速编码. 智能工作. 创造未来.
原文: Visual Studio 2019: Code faster. Work smarter. Create the future. Visual Studio 2019 的正式版现在可以下载了 ...
- Javascript高级编程学习笔记(23)—— 函数表达式(1)递归
前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就 ...
- Javascript高级编程学习笔记(20)—— 创建对象
由于今天有点事,加上对象原型链的东西有点多,所以今天这篇就讲一个小的知识点吧 也算为明天的对象继承做铺垫 工厂模式 虽然使用对象字面量来创建一个对象十分地便捷,但是这个方法有一个显著的缺点 那就是如果 ...
- 实用:Git 中的一些常见错误
无论是数据科学家.算法工程师还是普通开发人员,在每个团队协作开发任务中,Git 都是必不可少的版本控制工具,因此掌握它的基本操作十分有必要.但即便是教程满天飞的今天,开发人员在使用 Git 时也还是会 ...
- 小程序开发基础-swiper 滑块视图容器
小编 / 达叔小生 参考官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/ 小程序开发基础-swiper 滑块视图容器 根 ...
- 远程桌面连接:出现身份验证错误,要求的函数不受支持,可能是由于CredSSP加密Oracle修正的解决方法
在做app时需要连接服务器来进行数据交互,但是在阿里云页面里连接服务器太不好用,所以使用windows自带的远程连接来进行. 一.但是连接的过程中出现了以下问题: 二.最初是有点迷茫的,不知道从哪里下 ...
- 部署 HTTPS 访问 ( https:// )
简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,要比http协议安全. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是4 ...
- python基础-文件操作(10)
一.什么是文件 等等这些都叫做文件,各种格式的.但不仅仅限制于这些. 二.文件的作用 大家应该听说过一句话:“好记性不如烂笔头”. 不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了 ...
- 第四课 VMP壳内爆破
这一课用来演示的软件是文件巴士. 打开网页一搜索,可笑的是搜索到的结果都是破解版,想找个原版的倒费劲了. 好容易找到一个,下好一查壳,还没有... 行吧,自己加一个VMP壳开搞. 第一步 OD载入程序 ...