天天看點

開心農場助手——開發總結

一、原因

二、實作的初步成果

        開發時間進行了一天,初步成果介紹:使用者登入、自己菜地的植物成熟清單及其名稱,有成熟植物的好友清單。

三、程式開發重點

       1. 語言采用c#,該語言開發周期短

       2. 需要了解或者利用其他手段來獲知菜地的各種屬性值,利用該值作為資訊顯示和判斷的依據。

       3. 模拟http的POST、GET方法,以及cookie的使用和獲得。因為這個關系到網站模拟登入以及登入後的操作。

       4. Unicode編碼文字轉換為正常顯示

       5. 登入過程中,驗證碼的獲得和送出

       6. XML解析,難點是指定子節點,獲得該子節點的值。

       7. 正規表達式,使用正則來獲得需要的資訊,避免使用indexof來搜尋。

四、子產品介紹

       1. 登入

            1)使用HttpWebRequest來實作模拟POST登入,并獲得cookie

                  res = (HttpWebResponse) req.GetResponse();

                  strKaixinCookie = req.CookieContainer.GetCookieHeader(new Uri(url));            2)使用cookie

                  CookieContainer cookieCon = new CookieContainer();

                  httpWebRequest.CookieContainer = cookieCon;                  string [] Cookies=strKaixinCookie.Split(";".ToCharArray());

                  foreach(string cookie in Cookies)

                 {

                     httpWebRequest.CookieContainer.SetCookies(new Uri(url), cookie);

                 }       2. 登入驗證碼

           因為一直在測試程式,導緻每次登陸都會提示我輸入圖檔形式的驗證碼。這裡沒有采用文字識别,而是提示給使用者,讓使用者自己輸入。

          獲得驗證碼圖檔,一定要注意否則輸入的驗證碼資訊送出上去後無效。

         帶驗證碼送出的串

          invisible_mode=0&rcode=與驗證碼相一緻的随機串(必須一樣否則不能驗證失敗)&url=//&email=password=&code=驗證碼

      3. 一些URL

      登入者的菜地資訊

     成熟的好友清單

    好友菜地

    4. 正規表達式

         regex = new Regex("realname/":/"(.+?)/"",RegexOptions.Singleline);

         iEnumerator = regex.Matches(strResult).GetEnumerator();         try

         {

                while (iEnumerator.MoveNext())

               {

                       str+= NormalU2C(((Match)iEnumerator.Current).Groups[1].Value.ToString()) + "/r/n"; 

               }

         }

         finally

        {

               IDisposable iDisposable = iEnumerator as IDisposable;

               if (iDisposable != null)

                      iDisposable.Dispose();

        }     5. XML操作

         nodeList = doc.SelectNodes("/conf/garden/item");

         foreach (XmlNode node in nodeList)

              XmlNode subNode=node.SelectSingleNode("name");

              if (subNode!=null)

             {

                       string strName= subNode.InnerText;

                       string strProduct=node.SelectSingleNode("crops").InnerText;

                       str+=strName + " /r/n";

              }

        }五、暫告一段落