using System; using System.Threading.Tasks; using System.Windows.Forms; using System.Timers; using Newtonsoft.Json; using System.Text.RegularExpressions; using System.Configuration; using System.Linq; using HtmlAgilityPack; using System.Collections.Generic; using System.Web; namespace xiaomi { public partial class Form1 : Form { private static System.Timers.Timer _queuetimer; private static string cookies = string.Empty; //公有Cookie private static string codeCookie = string.Empty; public Form1() { InitializeComponent(); txtUserName.Text = ConfigurationManager.AppSettings["userName"].ToString(); txtPwd.Text = ConfigurationManager.AppSettings["userPwd"].ToString(); } private void btnStart_Click(object sender, EventArgs e) { if (checkBox1.Checked) { int t = Convert.ToInt32(txtMilliseconds.Text); TimerStart(t); } else { QiangGou(); } btnStart.Enabled = false; btnStop.Enabled = true; } private void btnStop_Click(object sender, EventArgs e) { TimerStop(); btnStart.Enabled = true; btnStop.Enabled = false; } public void TimerStart(int Interval) { if (_queuetimer == null) { _queuetimer = new System.Timers.Timer(); } else { _queuetimer.Close(); _queuetimer = new System.Timers.Timer(); } _queuetimer.Interval = Interval; _queuetimer.Elapsed += (sender, e) => _queuetimer_Elapsed(sender, e); _queuetimer.AutoReset = true; _queuetimer.Enabled = true; } public void TimerStop() { if (_queuetimer != null) { _queuetimer.Enabled = false; _queuetimer.Stop(); _queuetimer.Close(); } } void _queuetimer_Elapsed(object sender, ElapsedEventArgs e) { Parallel.Invoke(CreateTaskArray(10, QiangGou)); } /// /// 创建多个任务 /// /// /// private static Action[] CreateTaskArray(int taskCount, Action Dequeue) { var actions = new Action[taskCount]; for (int i = 0; i < taskCount; i++) { actions[i] = Dequeue; } return actions; } public void QiangGou() { //AppendText(cookies);//打印 HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = "http://tc.hd.xiaomi.com/hdget?callback=hdcontrol", UserAgent = "Mozilla/5.0 (Linux; U; Android 4.0.4; zh-cn; MI-ONE C1 Build/IMM76D) UC AppleWebKit/534.31 (KHTML, like Gecko) Mobile Safari/534.31", Host = "tc.hd.xiaomi.com", Cookie = cookies }; HttpResult result = http.GetHtml(item); string strJson = result.Html; if (strJson.Contains("hdcontrol")) { strJson = strJson.Replace("hdcontrol(", "").Replace(")", ""); xiaomiEntity xm = JsonConvert.DeserializeObject(strJson); bool allow = xm.Status.Allow; string Hdurl = xm.Status.Miphone.Hdurl; if (!string.IsNullOrEmpty(Hdurl)) { string url = "http://t.hd.xiaomi.com/s/" + xm.Status.Miphone.Hdurl + "&_m=1"; if (allow) { lblAllow.Invoke(new Action(delegate() { lblAllow.Text = allow.ToString(); })); txtUrl.Invoke(new Action(delegate() { txtUrl.Text = url; })); TimerStop(); } else { bool allowchecked = false; ckbAllow.Invoke(new Action(delegate() { allowchecked = ckbAllow.Checked; })); if (allowchecked == true) { txtUrl.Invoke(new Action(delegate() { txtUrl.Text = url; })); } } } } else { lblAllow.Invoke(new Action(delegate() { lblAllow.Text = "尚未开放"; })); } } private void btnLogin_Click(object sender, EventArgs e) { string username = txtUserName.Text; string password = txtPwd.Text; HttpItem itemSign = new HttpItem() { URL = "https://account.xiaomi.com/pass/serviceLogin", }; HttpHelper helperSign = new HttpHelper(); HttpResult resultSign = helperSign.GetHtml(itemSign); string signHtml = resultSign.Html; HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(signHtml); var htmlnodes = doc.DocumentNode.Descendants("input"); Dictionary dict = new Dictionary(); foreach (var item in htmlnodes) { if (item.Attributes["name"] != null && item.Attributes["value"] != null) { dict.Add(item.Attributes["name"].Value, item.Attributes["value"].Value); } } string passToken = HttpUtility.UrlEncode(dict["passToken"]); string callback = HttpUtility.UrlEncode(dict["callback"]); string sid = HttpUtility.UrlEncode(dict["sid"]); string qs = HttpUtility.UrlEncode(dict["qs"]); string hidden = HttpUtility.UrlEncode(dict["hidden"]); string _sign = HttpUtility.UrlEncode(dict["_sign"]); string auto = HttpUtility.UrlEncode(dict["auto"]); cookies = resultSign.Cookie; HttpItem itemLogin = new HttpItem() //登陆Post { URL = "https://account.xiaomi.com/pass/serviceLoginAuth2", Method = "POST", Cookie = cookies, Referer = "https://account.xiaomi.com/pass/serviceLogin", ContentType = "application/x-www-form-urlencoded", Postdata = string.Format("passToken={0}&user={1}&pwd={2}&callback={3}&sid={4}&qs={5}&hidden={6}&_sign={7}&auto={8}", passToken, username, password, callback, sid, qs, hidden, _sign, auto) }; HttpHelper helperLogin = new HttpHelper(); HttpResult resultLogin = helperLogin.GetHtml(itemLogin); if (resultLogin.Html.Contains("小米帐户 - 登录")) { AppendText(username + "登陆失败\n"); return; } AppendText(username + "登陆成功"); cookies += ";" + resultLogin.Cookie; // AppendText(cookies); } private void btnCopy_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtUrl.Text)) { Clipboard.SetDataObject(txtUrl.Text, true); } } protected void AppendText(string info) { txtInfo.Invoke((MethodInvoker)delegate { txtInfo.AppendText(info + Environment.NewLine); txtInfo.SelectionStart = txtInfo.Text.Length; txtInfo.ScrollToCaret(); }); } } }