HTTP-C#模擬登錄淘寶聯盟並下載淘寶客訂單xls

本程序實現模擬登錄淘寶聯盟並且下載淘寶客訂單xls文件。現提供源碼下載,有不明白的可以問我,同時如果您有好的修改建議請回復。我是第一次開發Http程序,請多包涵。

本次開發環境與工具如下:
IE9.0瀏覽器 + IE抓包插件HttpWatch +WIN7 64位系統 + VS2005 IDE + .NET 2.0框架

測試時注意事項:
必須取消淘寶帳號登錄保護http://110.taobao.com/protect/protect_web.htm

做這個程序關鍵是分析數據,只有數據分析出來了,才能動手寫代碼。
下面來幾張截圖說明分析數據步驟:
第一步:在淘寶聯盟www.alimama.com上面使用淘寶賬號登錄,輸入賬號密碼點擊登錄後,截到如下數據

現在我們知道了要POST的URL,即"https://login.taobao.com/member/login.jhtml",以及要POST的數據,還有服務器將會回覆的內容,那麼請看如下代碼:
  private void Login()
        {         
            HttpItem item = new HttpItem();
            item.URL = https://login.taobao.com/member/login.jhtml;   
            item.Method = "post";         
            item.Postdata = string.Format("ua=056u5Ob……&TPL_username={0}&TPL_password={1}&...……", HttpUtility.UrlEncode(txtLoginId.Text.Trim()), HttpUtility.UrlEncode(txtPwd.Text.Trim()));
            item.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
            item.Allowautoredirect = true;              
            HttpResult result = m_Http.GetHtml(item);
            string html = result.Html;//服務器回覆的內容,它是json格式,包括message,token等字段,message爲空爲登錄成功,否則不爲空
            string cookie = result.Cookie;//保存cookie便於後面還要使用
Match m = Regex.Match(html, "(?<=,\"message\":\").*?(?=\",)");
            if (string.IsNullOrEmpty(m.Value))  //登錄成功賬號密碼正確的情況下
            {
                Match token = Regex.Match(html, "(?<=\"token\":\").*?(?=\")");//捕獲token的值,後面提交的網址中將要使用它
                if (!string.IsNullOrEmpty(token.Value))
                {
                 ……
               }
           }            
       }
如上代碼所示,當訪問請求提交後,服務器返回的json內容在變量html裏面,其中message字段表示是否有錯誤,如:賬號密碼不正確,如果賬號密碼正確message字段值將爲"",所以我們利用正則表達式捕獲message的值。另外token字段我們也要獲取下來,因爲下一個訪問的網址要用到它。
第二步:根據捕獲的token值拼裝網址並繼續訪問,如下圖

從上面得到的token值,經過拼裝字符串得到下次訪問的URL,即"https://passport.alipay.com/mini_apply_st.js?site=0&token={0}&callback=vstCallback62"。這次訪問後服務器會返回一段js代碼,其中包含一個"st"的值(看上圖的紅色框部分),同樣,這次我們也像上次一樣用正則表達式捕獲"st”的值並且保存,因爲後面要使用到它。
(小結:其實我一直在做一件事情,即:把這次訪問的結果作爲參數拼裝一下將得到下次要訪問的網址)
private void Login(){
                 ……
Match token = Regex.Match(html, "(?<=\"token\":\").*?(?=\")");//獲取token值
                if (!string.IsNullOrEmpty(token.Value))
                {
                    item = new HttpItem();
                    item.Method = "get";
                    item.URL = string.Format("https://passport.alipay.com/mini_apply_st.js?site=0&token={0}&callback=vstCallback62", token.Value);
                    item.Accept = "application/javascript, */*;q=0.8";
                    result = m_Http.GetHtml(item);
                    html = result.Html;
                    cookie += result.Cookie;
                    Match st = Regex.Match(html, "(?<=\"st\":\").*?(?=\")");//捕獲st的值,後面還要使用它
                   ……
              }
}
第三步:根據捕獲的st值,繼續訪問,如下圖

通過將上面得到的st值再次拼裝下網址得到URL即https://login.taobao.com/member/vst.htm?st={0}&……TPL_username%3D{1}……&callback=jsonp75
,{0}處填寫上一步的st,{1}處填寫淘寶賬號,這次服務器同樣會返回下一次要訪問的網址,我們將他捕獲出來它就是url字段(上圖中紅框標記)

第四步:我們繼續訪問這個url,服務器將會進行重定向三次,每次重定向的網址從HttpResult.Header中Location字段中得到再賦值給item.URL進行訪問。如下圖


至此登錄就完成了,接下來就是下載xls文件了。對於下載xls文件較簡單,直接get方式提交網址,得到byte[]字節數組並利用FileStream類寫到文件中。大家根據以上分析的思路學會分析纔是最重要的,所以下載這部分就留給大家自已分析了。提示:下載觀看我的源碼+觀察HttpWatch截獲的數據2種方式相結合去分析,對於觀察HttpWatch截獲的數據主要觀看他是POST還是GET方式,以及訪問的地址和提交的COOKIE以及服務器返回的COOKIE,還有服務器的回覆流這幾個方面着手分析。


上面我在講解的過程中分了4個步驟,是從第1步至第4步講解的,其實我們在分析數據的時候應該首先從第4步開始一直回溯cookie就得到了第1步,因爲第4步中服務器發來的cookie纔是最重要的,有了它才能訪問淘寶聯盟的首頁(這個結論當然是通過幾次試驗得出的),但如果不進行第123步的話第4步的訪問地址t和cookie無法得出,所以第4步是分析數據的切入點,至關重要。


點擊進入源碼下載頁面

點擊進入HttpWatch下載頁面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章