asp.Net自動カード、チェックインプログラム

8472 ワード

現在、会社の通勤サインはローカルエリアネットワークのシステムに行って注文して、カードを打つのは比較的に簡単なため、遅刻しそうな同僚はすでに会社に着いた人を探してカードを打つのを手伝います.」他の身分でプログラムを実行して"IEを開けて、人を手伝って打って、时には何人か、このように操作して、私はとても面倒だと感じて、だから简単な方法を探してこの事を完成したいです.
まずユーザーの操作プロセスをカードしたいのですが、カードを打つページにログイン->クリック「通勤カードを打つ」(「退勤カードを打つ」)->完了.流れは簡単で、IEを開けてhttpclientなどのクラスで操作しないと、注目するものはアイデンティティ認証とフォーム提出(ボタントリガーイベント)があるはずです.ローカルエリアネットワーク、会社は自分の仕事のドメインがあって、その認証はWINDOWSで、提出したデータはボタンの名前に原始のビューと検証のビューを加えるべきで、どうしてこれらのデータで、これはASPだと思います.NETの基本的な、疑問があればhttp://www.cnblogs.com/fish-li/archive/2012/06/10/2544087.html#_label0 aspを見ることができます.Netpageの件は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, 0, 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 > 0)

                    {

                        result = temp.Substring(tempindex + 14, 20);

                    }



                }

            }

            catch (Exception ex)

            {

                return "";

            }

            return result;

        }

他にもアナログ認証、返送_EVENTTARGET,__EVENTARGUMENT,__VIEWSTATE,__EVENTVALLIDATIONの4つのパラメータデータは、最後の1つがない可能性がありますが、いつあるか、いつないかは、あまり言いません.ここで私はhttprequestとhttpresponseを使って、実は直接WebClientを使うのも同じで、最も主要なのは全体の流れのどのように歩くことを理解して、自分でどのように処理して、どのように自動カードを作ることについて、直接Timerをプラスして終わります、カードを打つ任務をよく管理するためにquartzを考えることができます.Netというタスクはオープンソースコンポーネントを計画します.サイトのサインをしたい人もいれば、クッキーの保存や画像検証コードの処理など、他のものもあるかもしれません.cookieは処理が上手ですが、検証コードの画像はどのように処理しても私はしたことがありません.大神が教えてくれることを望んでいます.感謝に堪えません.