zoukankan      html  css  js  c++  java
  • 第一讲 从头开始做一个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;
    }
    }

  • 相关阅读:
    .Net Remoting使用总结
    MacOS入门
    第一部分_Mac技巧
    国内安装Homebrew
    MacOS工具
    org.springframework.beans.factory.UnsatisfiedDependencyException异常
    五天一体_企业权限管理(SSM整合)
    00_02_使用Parallels Desktop创建Windos7虚拟机
    00_01_使用Parallels Desktop创建WindosXP虚拟机
    OpenCV中几何形状识别与测量
  • 原文地址:https://www.cnblogs.com/qizhuocai/p/9295772.html
Copyright © 2011-2022 走看看