本文来源于:http://hi.baidu.com/5457090/item/9746ca53536bf2968d12ed56
转载请注明出处
当开放API成为历史潮流不可阻挡之时,腾讯亦只能与时俱进,但腾讯为了保持江湖的垄断地位,不会随意公开像QQ号这样的客户资源,于是乎,你能通过webQQ查询到的,也只能是用户或群的昵称,绝非QQ号码或群号。
抓包发现:webQQ每次成功登陆后,接下来一般会去获取"好友列表"和"群列表"。而断线重连的时候,通常不需要。
你每次登录webQQ,腾讯服务器便会自动分配给你和你的QQ好友一个临时的uin;分配给群的,便是gid和gcode。
所谓“好友列表”便是好友的uin和昵称对应起来的信息列表。而所谓的“群列表”,则是临时的群名称和群gid、群gcode的对应列表。
1。获取好友信息表:
POSThttp://s.web2.qq.com/api/get_user_friends2HTTP/1.1
Referer:http://s.web2.qq.com/proxy.html
POST数据:一个json数据结构:
r={"h":"hello","vfwebqq":"【vfwebqq】"}
如果成功,会返回一个json数据结构:
{"retcode":0,"result":{"friends":[{"flag":0,"uin":3112962973,"categories":0}],"marknames":[],"categories":[{"index":1,"sort":1,"name":"朋友"},{"index":2,"sort":2,"name":"家人"},{"index":3,"sort":3,"name":"同学"}],"vipinfo":[{"vip_level":0,"u":3112962973,"is_vip":0}],"info":[{"face":0,"flag":524288,"nick":"Spark.Ho","uin":3112962973}]}}
我们把返回的数据,存放在一个指定的txt文件中,供其后操作的调用。
C++ (with libcurl)源程序
string WebQQ_buddy()
{
// 提取QQ登录信息:
char buf[1024];
string vfwebqq;
size_t found,found2;
ifstream QQLoginfile("D:\\SparkHo\\QQLogin.txt");
if(!QQLoginfile)
{
QQLoginfile.close();
vfwebqq = "";
}
else
{
QQLoginfile.getline(buf,1024);
string QQLogin = (string) buf;
QQLoginfile.close();
found = QQLogin.find("vfwebqq");
found2 = QQLogin.find(";",found+8,1);
vfwebqq = QQLogin.substr(found+8,found2-found-8);
}
// 初始化libcurl
CURLcode return_code;
return_code = curl_global_init(CURL_GLOBAL_WIN32);
if (CURLE_OK != return_code) return NULL;
// 获取easy handle
CURL *easy_handle = curl_easy_init();
if (NULL == easy_handle)
{
curl_global_cleanup();
return “”;
}
string buffer;
string post_url = "http://s.web2.qq.com/api/get_user_friends2";
string referer_url = "http://s.web2.qq.com/proxy.html";
string base = "{\"h\":\"hello\",\"vfwebqq\":\""+vfwebqq+"\"}";
string urlencode = curl_easy_escape(easy_handle,base.c_str(),0);
string fields = "r=" + urlencode;
// 设置easy handle属性
curl_easy_setopt(easy_handle, CURLOPT_URL, post_url.c_str());
curl_easy_setopt(easy_handle, CURLOPT_REFERER, referer_url.c_str());
curl_easy_setopt(easy_handle, CURLOPT_POST, 1);
curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS, fields.c_str());
curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, &buffer);
//提交第一步保存的cookie
curl_easy_setopt(easy_handle, CURLOPT_COOKIEFILE,"D:\\SparkHo\\cookie_login.txt");
// 执行数据请求
curl_easy_perform(easy_handle);
// 释放资源
curl_easy_cleanup(easy_handle);
curl_global_cleanup();
// 更新QQ好友列表信息:
fstream QQBuddywrite("D:\\SparkHo\\QQBuddy.txt",ios::out|ios::trunc);
QQBuddywrite<<buffer.c_str();
QQBuddywrite.close();
return buffer;
}
2。获取群信息表:
POSThttp://s.web2.qq.com/api/get_group_name_list_mask2HTTP/1.1
Referer:http://s.web2.qq.com/proxy.html
POST数据:一个json数据结构:
r={"vfwebqq":"【vfwebqq】"}
如果成功,会返回一个json数据结构:
{"retcode":0,"result":{"gmasklist":[],"gnamelist":[{"flag":17825793,"name":"Spark.Ho操盘","gid":2444491359,"code":2485575464}],"gmarklist":[]}}
我们把返回的数据,存放在一个指定的txt文件中,供其后操作的调用。
C++ (with libcurl)源程序
string WebQQ_group()
{
// 提取QQ登录信息:
char buf[1024];
string vfwebqq;
size_t found,found2;
ifstream QQLoginfile("D:\\SparkHo\\QQLogin.txt");
if(!QQLoginfile)
{
QQLoginfile.close();
vfwebqq = "";
}
else
{
QQLoginfile.getline(buf,1024);
string QQLogin = (string) buf;
QQLoginfile.close();
found = QQLogin.find("vfwebqq");
found2 = QQLogin.find(";",found+8,1);
vfwebqq = QQLogin.substr(found+8,found2-found-8);
}
// 初始化libcurl
CURLcode return_code;
return_code = curl_global_init(CURL_GLOBAL_WIN32);
if (CURLE_OK != return_code) return NULL;
// 获取easy handle
CURL *easy_handle = curl_easy_init();
if (NULL == easy_handle)
{
curl_global_cleanup();
return “”;
}
string buffer;
string post_url = "http://s.web2.qq.com/api/get_group_name_list_mask2";
string referer_url = "http://s.web2.qq.com/proxy.html";
string base = "{\"vfwebqq\":\""+vfwebqq+"\"}";
string urlencode = curl_easy_escape(easy_handle,base.c_str(),0);
string fields = "r=" + urlencode;
// 设置easy handle属性
curl_easy_setopt(easy_handle, CURLOPT_URL, post_url.c_str());
curl_easy_setopt(easy_handle, CURLOPT_REFERER, referer_url.c_str());
curl_easy_setopt(easy_handle, CURLOPT_POST, 1);
curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS, fields.c_str());
curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, &buffer);
//提交第一步保存的cookie
curl_easy_setopt(easy_handle, CURLOPT_COOKIEFILE,"D:\\SparkHo\\cookie_login.txt");
// 执行数据请求
curl_easy_perform(easy_handle);
// 释放资源
curl_easy_cleanup(easy_handle);
curl_global_cleanup();
// 更新QQ群列表信息:
fstream QQGroupwrite("D:\\SparkHo\\QQGroup.txt",ios::out|ios::trunc);
QQGroupwrite<<buffer.c_str();
QQGroupwrite.close();
return buffer;
}
3。获取群成员信息表:
GET http://s.web2.qq.com/api/get_group_info_ext2?gcode=【gcode】&vfwebqq=【vfwebqq】 HTTP/1.1
Referer:http://s.web2.qq.com/proxy.html
POST数据:一个json数据结构:
r={"vfwebqq":"【vfwebqq】"}
如果成功,会返回一个json数据结构:
{"retcode":0,"result":{"stats":[{"client_type":1,"uin":1664604219,"stat":30},。。。,{"client_type":41,"uin":2393982134,"stat":10}],
"minfo":[{"nick":"David","province":"","gender":"male","uin":2010255454,"country":"","city":""}, 。。。,{"nick":"﹏落败的唯美丶","province":"山东","gender":"female","uin":3386757496,"country":"中国","city":"青岛"}],
"ginfo":{"face":0,"memo":"飞狐下载\nhttp://dl.dbank.com/c0pmgrt8wa\n\r\n通达信":"顺势而为","code":2485575464,"createtime":1260641721,"flag":17825793,"level":0,"name":"Spark.Ho操盘","gid":2444491359,"owner":3112962973,
"members":[{"muin":2010255454,"mflag":132},,,,,{"muin":3386757496,"mflag":0}],"option":2},
"cards":[{"muin":3112962973,"card":"Spark.Ho"},。。。,{"muin":2393982134,"card":"SP预警"}],
"vipinfo":[{"vip_level":0,"u":4157281859,"is_vip":0},。。。,{"vip_level":0,"u":3489781961,"is_vip":0}]}}
webQQ获得群列表、好友列表相关推荐
- 【iOS XMPP】使用XMPPFramewok(五):好友列表
好友列表 好友列表,在 XMPP 中被称为 roster,花名册? 获取 roster 需要客户端发送 <iq /> 标签向 XMPP 服务器端查询 一个 IQ 请求: <iq ty ...
- 利用web端接口实现QQ好友列表获取、QQ群成员获取列表的实例分析
当开放API成为历史潮流不可阻挡之时,腾讯亦只能与时俱进,但腾讯为了保持江湖的垄断地位,不会随意公开像QQ号这样的客户资源,于是乎,你能通过webQQ查询到的,也只能是用户或群的昵称,绝非QQ号码或群 ...
- python爬取微信好友头像_python 使用wxpy实现获取微信好友列表 头像 群成员
最近在学习 python 突然想要试试能不能把微信里面的微信群和好友取出来 结果百度了一下 找到了 wxpy 这怎么能不试一下呢 用到 wxpy.threading.os.time 四个库 第一步 判 ...
- python 使用wxpy实现获取微信好友列表 头像 群成员
最近在学习 python 突然想要试试能不能把微信里面的微信群和好友取出来 结果百度了一下 找到了 wxpy 这怎么能不试一下呢 用到 wxpy.threading.os.time 四个库 第一步 判 ...
- socket聊天室实现-群聊,私聊,好友列表,完整版
效果图 登录.好友上线,下线均提示. 点击好友列表所有人,发送消息,既为群聊 点击好友列表,好友名字,既为选中此好友进行私聊 服务器端代码 ChatRoomServer package sram.se ...
- java 探花交友项目day5 推荐好友列表 MongoDB集群 发布动态,查询动态 圈子功能
推荐好友列表 需求分析 推荐好友:分页形式查询推荐的用户列表,根据评分排序显示 代码实现: tanhuaController: /** * 查询分页推荐好友列表 */ @GetMapping(&q ...
- Dobbo微服务项目实战(详细介绍+案例源码) - 5.推荐好友列表/MongoDB集群/动态发布与查看
You are a wizard, Harry! 系列文章目录 1. 项目介绍及环境配置 2. 短信验证码登录 3. 用户信息 4. MongoDB 5.推荐好友列表/MongoDB集群/动态发布与查 ...
- qq好友列表获取导出,利用QQ协议实现好友数据备份,包含:qq好友、QQ分组、QQ群、qq群成员【附code源码】
qq好友列表获取导出,利用QQ协议实现qq好友数据备份,包含:qq好友.QQ分组.QQ群.qq群成员. 我们是在浏览器中的操作,接下来看看数据到底怎么获取的,我们通过Fiddler的查找功能,就可以查 ...
- PC微信逆向:使用HOOK获取好友列表和群列表
文章目录 获取好友列表的切入点 定位查询好友信息的函数 定位微信号的地址 一次错误的尝试 再次查找目标函数 成功定位获取好友信息的函数 定位获取好友列表的函数 示例代码 实际效果 预告 获取好友列表目 ...
最新文章
- vue-socket.io跨域问题的解决方法
- BASIC-23_蓝桥杯_芯片测试
- jpa hibernate mysql_008Spring JPA Hibernate MySQL
- .net mvc 报表_Web在线报表设计器使用指南
- 4、Mysql 主从复制报错[ERROR] [MY-013117] 踩坑
- linux系统基础优化小结
- 前端学习(3001):vue+element今日头条管理--项目初始化总结
- 【POJ - 2255】Tree Recovery (给定树的先序中序,输出后序)
- 数据结构链表知识入门
- java判断变量是奇书还是偶数_测试值是奇数还是偶数
- 修改php前台地址,PHPCMS如何增加电话、地址等方便前台调用的自定义变量
- java中paint_java中paint()的具体用法是什么?
- android自定义工具栏,Android工具栏中的自定义图标
- 2019东南大学研究生课程计算机网络安全
- (30 gadget day 8) 你爱我有几分 — Mindwave mobile
- CF1151FSonya and Informatics
- 深度学习硬件:CPU 和 GPU 动手学深度学习v2
- 计算机考研数学一大纲2016,2016考研大纲:计算机专业
- 【C语言】使用Qt5学习C语言编写Hello World
- 全志r16android sdk,全志R16的android4.4.2平台點亮gc2145(evb30)版本:V1.1(分色排版)...
热门文章
- 750W高PF值充电机用电源方案
- kali设置中文及安装拼音输入法
- 使用MacBook自带工具抓包跑字典破解WiFi
- sklearn中Polynomialfeatures
- 阅读笔记 - 20220305
- Linux管理员面试题大全
- SpringBoot国际化
- 【图像-关键点json标签】的数据集生成器
- c语言--贪吃蛇小游戏
- 主人拿刀帮宠物狗打架 萨摩耶犬被砍4刀险被夺命