新手教程:
前言:最近在看了一下很久很久以前做的qq机器人失效了,最近也在换工作目前还在职,时间很挺宽裕的。就决定从新搞一个web qq机器人 PC的协议解析出来有点费时间以后再做。
准备工作:
编译工具:vs2017
编程语言:C# 或者.net
开始建一个SDK 新建文件 -项目 -选择类库-(WEBQQSDK)-添加一个类 smartqq
第一步,登录了一下Smart QQ,以这个HTTP协议,做机器人交互吧,TX把这个版本的很多功能去掉了,基本的群聊,私聊 收发信息之类还在。(用谷歌浏览器 访问http://web2.qq.com/ 按F12 进入开发者窗口 进入 network -all)
开始拿二维码的连接name 为 /ptqrshow开头的就是二维码的请求连接
https://ssl.ptlogin2.qq.com/ptqrshow?appid=501004106&e=2&l=M&s=3&d=72&v=4&t=0.05929581762262637&daid=164&pt_3rd_aid=0
标黄的是随机的。后期可以弄一个Random 。我之前已经做好一个HTTP通信类,这些都会开源放到码云上面的。
private static Random rand = new Random();
???????static int ptqrtoken = 0;//检查二维码状态需要验证
???????/// <summary>
???????/// 第一步获取二维码
???????/// </summary>
???????/// <returns></returns>
???????public static Image Login_GetQRCode()
???????{
???????????HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://ssl.ptlogin2.qq.com/ptqrshow?appid=501004106&e=2&l=M&s=3&d=72&v=4&t=#{t}&daid=164&pt_3rd_aid=0".Replace("#{t}", rand.NextDouble().ToString()));
???????????req.CookieContainer = HTTP.cookies;//设置cookies
???????????HttpWebResponse res = (HttpWebResponse)req.GetResponse();//请求到Response可以对比开发者界面的数据
???????????ptqrtoken = HTTP.Hash33(HTTP.GetAllCookies(res.Cookies));//保存下来,检查二维码状态需要验证。
???????????return Image.FromStream(res.GetResponseStream());
???????}
这个已经获取到二维码了。新建一个login form窗口,拉一个pictureBox组件,还有一个button 按钮。
窗口Login 代码
private void button1_Click(object sender, EventArgs e)
???????{
???????????pictureBox1.Image = SmartQQ.Login_GetQRCode();
???????}
运行
运行结果,这个就是登陆的二维码。第一步到这里就完成了。
HTTP类
/// <summary>
???/// HTTP网络通信类
???/// </summary>
???public static ?class HTTP
???{
???????
??????public ?static CookieContainer cookies = new CookieContainer();
??/// <summary>
???????/// Hash ?转换
???????/// </summary>
???????/// <param name="s"></param>
???????/// <returns></returns>
???????public static int Hash33(string s)
???????{
???????????var e = 0;
???????????foreach (var t in s)
???????????????e += (e << 5) + t;
???????????return int.MaxValue & e;
???????}
???????/// <summary>
???????/// 获取CookieCollection下 所有cookie
???????/// </summary>
???????/// <param name="cc"></param>
???????/// <returns></returns>
???????public static string GetAllCookies(CookieCollection cc)
???????{
???????????//List<Cookie> lstCookies = new List<Cookie>();
???????????string lstCookies = "";
???????????ArrayList table = (ArrayList)cc.GetType().InvokeMember("m_list",
???????????????System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField |
???????????????System.Reflection.BindingFlags.Instance, null, cc, new object[] { });
???????????if (table != null)
???????????{
???????????????for (int i = 0; i < table.Count; i++)
???????????????{
???????????????????string[] tacookie = table[i].ToString().Split(‘=‘);
???????????????????lstCookies = tacookie[1].ToString().Trim();
???????????????}
???????????}
???????????return lstCookies;
???????}
???}
第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码
原文地址:https://www.cnblogs.com/qizhuocai/p/9295772.html