第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码

新手教程:

前言:最近在看了一下很久很久以前做的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;
}
}

 

posted @ 2018-07-11 17:32  qizhuocai  阅读(838)  评论(0编辑  收藏  举报