C# : 類比請求初步應用,製作網頁遊戲輔助程式(開心網爭車位、咬人、買房子、虛擬朋友、禮物)

來源:互聯網
上載者:User

開心網協助工具輔助,可以自動進行操作。

準備工具:WSockExpert(用於抓包)

原理:分析出開心網的所有操作串連,通過程式類比請求進行大量操作!

以開心網登陸做例子,並用程式進行類比登陸。

選擇好監聽頁面後從瀏覽器進行登陸操作。

 

    點擊登陸按鈕後,抓包程式就會有變化了,因為剛才我們進行了與開心網伺服器互動動作,需要向外發送資料,所以通過抓包資料得到了如下結果:

 

POST /login/login.php HTTP/1.1
Accept: application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://www.kaixin001.com/
Accept-Language: zh-CN
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; CIBA)
Host: http://www.kaixin001.com/
Content-Length: 48
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: _uid=2121099; SERVERID=_srv134-110_

mailto:url=%2F&email=dirain**@yahoo.cn&password=19920226

 

/login/login.php,就是登陸的請求地址,全部串連應該是:http://www.kaixin001.com/login/login.php。

最底部的mailto:url=%2F&email=dirain**@yahoo.cn&password=19920226 應該就是傳遞的參數,我們可以看到,只提交了帳號和密碼為參數,請求類型為POST。

 

得到了這些資訊,就可以通過C#的WebRequest去類比一個請求,實現登陸操作,代碼也很簡單。

 類比請求的方法

 

代碼

/// <summary>
        /// 發送Post類型請求
        /// </summary>
        /// <param name="url">請求地址</param>
        /// <param name="postData">參數</param>
        /// <returns></returns>
        public WebResponse doPost(string url,string postData)
        {
            try
            {
                System.GC.Collect();
                Thread.Sleep(this.defer);
                byte[] paramByte = Encoding.UTF8.GetBytes(postData); // 轉化
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
                
                webRequest.Method = "POST";
                webRequest.ContentType = "application/x-www-form-urlencoded";
                webRequest.Referer = "http://www.kaixin001.com/app/app.php?aid=1040";
                webRequest.Accept = "application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*";
                webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; CIBA)";
                webRequest.ContentLength = paramByte.Length;
                webRequest.CookieContainer = this.cookies;
                //webRequest.Timeout = 5000;
                Stream newStream = webRequest.GetRequestStream();
                newStream.Write(paramByte, 0, paramByte.Length);    //寫入參數
                newStream.Close();
                return webRequest.GetResponse();
            }
            catch (Exception ce)
            {
                throw ce;
            }
        }

 

在類比請求中需要注意的是同步Cookie,否則沒有辦法維持session。

webRequest.CookieContainer = this.cookies;

這句話就是維持session的關鍵代碼,this.cookies是一個非局部變數,這樣保證每次調用的時候都可以使用上次操作時的cookie。

 

/// <summary>
        /// 與請求相關的cookie(用於保持session)
        /// </summary>
        protected CookieContainer cookies = new CookieContainer();

 

只要每次請求的時候把Webrequest對象的CookieContainer 屬性賦值為已經聲明好的 CookieContainer對象,而不是重新執行個體化。

 登陸開心網

 

代碼

/// <summary>
        /// 登陸開心網
        /// </summary>
        /// <param name="account">使用者名稱</param>
        /// <param name="password">密碼</param>
        /// <returns>使用者個人資訊</returns>
        public virtual UserInfoEntity Login(string account,string password)
        {
            try
            {
                //拼湊登陸參數
                string param = "url=/home/&invisible_mode=0&email=" + account + "&password=" + password;
                WebResponse response = this.doPost("http://www.kaixin001.com/login/login.php",param);
                StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

                //如果返回地址為home頁,則說明登陸成功
                if (response.ResponseUri.ToString() == "http://www.kaixin001.com/home/")
                {
                    //讀取返回的流
                    string body = streamReader.ReadToEnd();

                    //如果存在如下資訊則登陸失敗
                    if (body.IndexOf("帳號或密碼不太對吧! 重試一次?") != -1)
                    {
                        return null;
                    }
                    else
                    {
                        //登陸成功後執行
                        //
                    }
                }
                else
                {
                    response.Close();
                    streamReader.Close();
                }
            }
            catch
            {
            }
        }

這是個簡單的類比請求登陸代碼,其實做WEB程式的協助工具輔助,重要的就是分析資料,這個例子中最重要的步驟還是用抓包工具去抓取開心網的提交方式以及傳遞參數。如果你不用抓包工具去抓取你也可以通過分析html表單來擷取傳遞方式,但這樣會很麻煩。

     

//post時,自動跳轉與否??

 request.AllowAutoRedirect = true;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.