1. 程式人生 > >第一講 從頭開始做一個web qq 機器人,第一步獲取smart qq二維碼

第一講 從頭開始做一個web qq 機器人,第一步獲取smart qq二維碼

sum 準備 網絡通信 reac esp 基本 info 獲取 ray

新手教程:

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