目前公司上下班签到是上局域网的一个系统去点一下,由于打卡比较简单,所以有些快迟到的同事会找已经到公司的人帮忙代打卡。”以其它身份运行程序“来打开IE,去帮人打下,有时多几个人,也要这样操作,我感觉挺麻烦,所以就想找个简单的方法来完成这个事。

先想打卡用户操作流程,登录打卡页面->点击”上班打卡“("下班打卡")->完成。流程很简单,我们要不打开IE直接用httpclient等类来操作的话,关注的东西应该有身份认证和表单提交(按钮触发事件)。局域网,公司有自己的工作域,那身份验证就是WINDOWS了,提交的数据应该按钮名字加上原始视图和验证视图,为什么是这些数据,这个我想应该是ASP.NET的基本的,如有疑问可以看下http://www.cnblogs.com/fish-li/archive/2012/06/10/2544087.html#_label0asp.net page那点事和http://www.cnblogs.com/fish-li/archive/2011/07/17/2108884.html细说form表单。

下面是核心代码

private string SignIN(string name, string pwd, string btnname)
{
string result = "";
try
{ System.Net.HttpWebRequest req = (HttpWebRequest)System.Net.HttpWebRequest.Create("http://cws/cws_home/Welcome.aspx");
req.ContentType = "application/x-www-form-urlencoded";
req.SendChunked = true;
CredentialCache credentialCache = new CredentialCache();
NetworkCredential credentials = new NetworkCredential(name, pwd);
credentialCache.Add(new Uri(Url), "Negotiate", credentials);
req.Credentials = credentialCache;
req.Method = "POST";
Encoding myEncoding = Encoding.UTF8;
HttpUtility.UrlEncode("", myEncoding);
string param = HttpUtility.UrlEncode("__EVENTTARGET", myEncoding) + "=" +
HttpUtility.UrlEncode(whatfuck) + "&" +
HttpUtility.UrlEncode("__EVENTARGUMENT", myEncoding) + "=" + "&" +
HttpUtility.UrlEncode("__VIEWSTATE", myEncoding) + "=" +
HttpUtility.UrlEncode("/wEPDwUKLTcwODg1MTE2NmRkSwoNIxF8KOccrbrL57PfhViXnpY=", myEncoding) + "&" +
HttpUtility.UrlEncode("__EVENTVALIDATION", myEncoding) + "="
+ HttpUtility.UrlEncode("/wEWAwLq6svwAQKRkrn2CAKMkrn2CF+ktkMYwyMeA64pdF2jiSwcCSRH", myEncoding);
byte[] postBytes = Encoding.ASCII.GetBytes(param);
req.ContentLength = postBytes.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(postBytes, , postBytes.Length);
}
using (WebResponse wr = req.GetResponse())
{
Stream sm = wr.GetResponseStream(); StreamReader reader = new StreamReader(sm, Encoding.GetEncoding("utf-8"));//输出返回值数据
string temp = reader.ReadToEnd();
int tempindex = temp.IndexOf("<script>alert");
if (tempindex > )
{
result = temp.Substring(tempindex + , );
} }
}
catch (Exception ex)
{
return "";
}
return result;
}

其它就是模拟认证,传回__EVENTTARGET,__EVENTARGUMENT,__VIEWSTATE,__EVENTVALIDATION四个参数据,最后一个有可能没有,什么时候有什么时候没有,就不多说了。这里我用了httprequest和httpresponse,其实直接用WebClient也是一样,最主要是明白整个流程的怎么走的,自己怎么去处理,至于怎么做成自动打卡,直接加个Timer就完了,如想很好管理打卡任务可以考虑quartz.net这个任务计划开源组件。有些可能想做网站的签到,那可能还有些其它东西,如cookie的保存,和图片验证码的处理等。cookie倒好处理,但验证码图片怎么处理我也没做过,希望有大神可以指教一下,不胜感激。

asp.net自动打卡、签到程序的更多相关文章

  1. 如何利用Python实现自动打卡签到

    需求描述 我们需要登录考勤系统(网页端,非手机端)进行签到,如果不想每天都早早起来打卡签到,就可以通过写程序实现这一功能. 业务梳理 通过长时间的早起打卡签到发现规律,我每天只是不停的点击,签到,都是 ...

  2. WPF版公司的自动签到程序

    1.外包公司要求早上签到,就写了一个自动打卡程序. 2.一直都想写这个程序,可是一直没有思路,知道有个软件公司找我做自动答题程序,于是自动打卡程序才应运而生.未来可以将自动答题程序开源工大家查看. 3 ...

  3. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

  4. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...

  5. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  6. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  7. 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  8. 自动发布-asp.net自动发布、IIS站点自动发布(集成SLB、配置管理、Jenkins)

    PS:概要.背景.结语都是日常“装X”,可以跳过直接看自动发布 环境:阿里云SLB.阿里云ECS.IIS7.0.Jenkins.Spring.Net 概要 公司一个项目从无到有,不仅仅是系统从无到有的 ...

  9. vs2015 已经支持开发asp .net core 1.0 rc2 程序了

    vs2015 已经支持开发asp .net core 1.0 rc2 程序了 http://mp.weixin.qq.com/s?__biz=MzI0MzM1ODczOQ==&mid=2247 ...

随机推荐

  1. 微信SDK导入报错 Undefined symbols for architecture i386:"operator delete[](void*)", referenced from:

    异常信息: Undefined symbols for architecture i386:  "operator delete[](void*)", referenced fro ...

  2. 【JSONKit】序列化Dictionary崩溃

    jsonkit通过Dictionary转换成JSON字符串时总是崩溃. 解析代码: 崩溃地点 分析是因为我的参数中全是数字   找了一下原因,不知道知道怎么设置,(求大神指点) 这里有一个折中办法使用 ...

  3. 获取设备、APP的一些信息

    获取设备的一些信息: UIDevice *device = [UIDevice currentDevice]; @property(nonatomic,readonly,strong) NSStrin ...

  4. Java并发编程之ThreadLocal类

    ThreadLocal类可以理解为ThreadLocalVariable(线程局部变量),提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回当 ...

  5. LogBoy运行截图

  6. 03-树2. Tree Traversals Again (25)

    03-树2. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue ...

  7. 获取所有树叶子节点 注册添加事件 if ($(node).tree('isLeaf', node.target)) 是否叶子节点

    //获取所有树叶子节点 注册添加事件 if ($(node).tree('isLeaf', node.target)) 是否叶子节点 $(function () { $('.easyui-tree') ...

  8. android Xml生成一条细线,以及获取屏幕宽度和高度

    <View android:layout_width="match_parent" android:layout_height="2dip" androi ...

  9. Android事件侦听器回调方法浅谈

    http://developer.51cto.com/art/201001/180846.htm Android事件侦听器作为视图View类的接口,其中包含有不少回调方法,比如:onClick():o ...

  10. Android实现ListView或GridView首行/尾行距离屏幕边缘距离

    直接上关键属性: 设置ListView或GridView的android:clipToPadding = true, 然后通过paddingTop和paddingBottom设置距离就好了.