【C#】解放双手!制作自动学工系统体温打卡程序

发布于 2022-05-16  417 次阅读



注:本教程仅提供思路,实际情况可能由于各种原因导致不同。

免责声明:仅用于学习用途,切勿用于实际。疫情形势严峻,务必认真做好防疫工作。


使用的软件:

  • Visual Studio
  • Fiddler
  • 精易编程助手

使用的编程语言:

  • C#

流程图


1.抓包获取登录请求

由于学校软件关联了wx小程序,所以在浏览器中打开会拒绝访问

  • 可以使用Fiddler的代理在手机或模拟器中抓包

由于这里通过端口扫描发现了另外一个相同的学校打卡的登录地址(该地址意义不明),可以不走wx小程序

打开Fiddler抓包并完成一次登录操作,获取登录请求地址以及Cookie用于后续打卡

TextView中则是向服务器提交的参数 account、pwd、mobile

后续通过代码来实现只需要向后端发送account、pwd参数post请求并记录Cookie即可完成登录操作

string postdate = string.Format("account=&pwd=&mobile=",textBox1.Text.Trim(), 
textBox2.Text.Trim());
byte[] bt = Encoding.UTF8.GetBytes(postdate);

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(@""));

req.Method = "POST";
req.Headers.Add("X-Requested-With", "XMLHttpRequest");
req.Headers.Add("Accept-Language", "zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.2");
req.Referer = "";
req.Accept = "text/plain, */*";
req.ContentType = "application/x-www-form-urlencoded";
req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko";
            

Stream stm = req.GetRequestStream();

stm.Write(bt, 0, bt.Length);
stm.Close();

HttpWebResponse res = (HttpWebResponse)req.GetResponse();
Stream stms = res.GetResponseStream();
StreamReader reader = new StreamReader(stms, Encoding.UTF8);
string result = reader.ReadToEnd();
reader.Close();
req.Abort();

string Cookie = res.Headers["Set-Cookie"];

2.获取打卡请求

因通过抓包获取和上述方法同理,故获取打卡请求及参数我通过浏览器“开发人员工具”来获取

通过下载并分析js代码可知参数以及post请求地址

通过带入之前登录获取的Cookie值发送post请求完成打卡。

TWDate = string.Format("TWSJ={0}&SQDate={1}&Temperature={0}&TWZT=%E6%AD%A3%E5%B8%B8&address=%E6%B1%9F%E8%A5%BF%E7%9C%81%E4%B9%9D%E6%B1%9F%E5%B8%82%E6%B0%B8%E4%BF%AE%E5%8E%BF%E5%8D%9A%E5%AD%A6%E5%A4%A7%E9%81%93",textBox4.Text.Trim(), textBox5.Text.Trim());
byte[] TWDatebt = Encoding.UTF8.GetBytes(TWDate);
HttpWebRequest daka = (HttpWebRequest)WebRequest.Create(new Uri(@""));
daka.Method = "POST";
daka.Headers.Add("Cookie", Cookie);
daka.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko";
daka.Headers.Add("X-Requested-With", "XMLHttpRequest");
daka.Headers.Add("Accept-Language", "zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.2");
daka.Referer = "";
daka.Accept = "text/plain, */*";
daka.ContentType = "application/x-www-form-urlencoded";

Stream stmtw = daka.GetRequestStream();
stmtw.Write(TWDatebt, 0, TWDate.Length);
stmtw.Close();

HttpWebResponse restw = (HttpWebResponse)daka.GetResponse();

Stream stmstw = restw.GetResponseStream();

StreamReader readertw = new StreamReader(stmstw, Encoding.UTF8);
string resulttw = readertw.ReadToEnd();
readertw.Close();
daka.Abort();