C#模擬百度登錄併到指定網站評論回帖(五)

前面的四篇已經說完了全部的模擬百度登錄,接下來就是到指定的網站去發表評論,當然你也可能是獲取其他信息,其實這些套路都是萬變不離其宗的,弄懂之後覺得像這種請求-響應獲取信息的功能實在很簡單(想起當初走的彎路,真是太心酸了)

 

    今天的詳細評論過程就不多說了,這裏就指出一下我在寫這個功能的時候遭遇的問題,也正是這些問題導致陷入了困境。(主要是理論,有不懂的童鞋歡迎評論交流)

    第一個問題:如果使用的百度登錄網站,那麼前面我們獲取到BDUSS之後,到這裏就要發生轉換。因爲我訪問的網頁,在訪問主頁的時候會通過BDUSS去繼續請求,獲得一個該網站的新BDUSS,這就說明,前面搞了那麼多功夫咱們其實也就只拿到了一條鑰匙罷了。要想打開信息之門,還需要我們再去打開其他的門。

    那這裏要說的還是——邏輯分析,這個太重要了,進入新網站之後我們需要重新進行分析,找到主要的請求響應頁,有時候網頁會發生多次跳轉,信息也會跟着變化。如果真要完全模擬的話 ,我們要做的功夫就會很多,所以這裏我們只要找出那些有我們需要的信息的請求響應頁就可以了。

            比如說我要獲得網站自己的BUDSS,那麼就聯繫前後內容,看看哪個頁面用到新的BUDSS,然後再追溯回頭,慢慢排除,直到找到響應哪個BDUSS的頁面。這個過程就是考驗耐心跟細心的了跟其他沒有啥關係。

           那第二個問題:就是Cookie!這個跟前面的一個要素是確定功能是否能夠順利實現的絕對條件,沒有這兩個,代碼寫多少都是錯!

                              所以,到新網站的時候,一定要分析有哪些新的Cookie,然後把他們全都收集起來。我就是在寫評論功能的時候,獲取網站的驗證碼,雖然能拿到,但總是發生錯誤,這就是沒有拿到sessionID跟cookie的後果。請求網頁的驗證碼,必須要這兩個東西,如果你看到自己的錯了,那麼就看看cookie收集器裏面有沒有這些值!因爲網站要識別你是不是同一個人拿的驗證碼然後提交,看得就是sessionID,所以必須有這個值。

 

    下面是具體的實現代碼:這裏大家不用瞭解太深,只需要知道下面的代碼就是不停的請求不同的頁面,然後獲取響應,直到把請求驗證碼頁面需要的cookie和參數都獲取完全了,再發起請求。值的注意的是,每個頁面之間有一定的邏輯性,中間跳過了一些不必要的頁面,所以大家在分析的時候要認真。

 /// <summary>
       /// 封裝的獲取評論頁面驗證碼
       /// </summary>
       public void GetCommentCode(string bookID, string bookLink, HttpHelper helper, PictureBox pictureBox) 
       {
           string corrssmain_do_Getbudss = string.Format("http://passport.zongheng.com/bdpass/crossdomain.do?bdu={0}&t={1}", "MW5RMkpwVjJWSlNtZDFiRTlYTFVsMllYbHVUSGd3VTFwbFJrMUpXVXRCYURWdExTMVlhMmt6VEg1TGFHUlhRVkZCUVVGQkpDUUFBQUFBQUFBQUFBRUFBQUJGMjVjc3U2alQ2czdVelAyN3FOUHFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQLWQ3MVh+bmU5VmFr", Utility.GetTimeStamp());
           string url_maindo = string.Format("http://passport.zongheng.com/pcLogin/main.do?_t={0}&source=0&bduss={1}&location={2}", Utility.GetTimeStamp(), "KJBRdxvy560zXPcYv0F0AG8JYzkmgGDuRCI7IbDJSriNuXDHx19o~m98AjZ7S0JkqCIE4RdROE~L619B2jMrePdR6tVWXDWFkv4G67lNk89egiTeU8TMRviPQteRtH7ujGE09bLNvOLsTEp9QTKAe~MrWqD9wN7JReLd*YgwzOEXEbT3R8KsUBJvEf3KeZ4vKDOJdCC1yUIg*XdaexZ6hHPNZndvfNGQud3aCgCEnZypWEBYqXIFbiw*IrhLs9BcEds2FP1ox8ixyPC0XpvvOpAhMe6HsOM1b5jTJExoOnT0c17oeLswmhM3lP0~wLhAhy~Sq0dTs9KM7T84YJKZPA==", Utility.UrlDecode("http%3A%2F%2Fwww.zongheng.com%2F"));
           string url_getSession = string.Format("http://book.zongheng.com/ajax/book.comment.getThreadL1st2.do");//這個頁面是響應sessionID的
           string postData_Session = string.Format("bookId={0}&pagebar=0&pageNum=1&pageSize=30", bookID);
           helper.GetPageResponse_Get(corrssmain_do_Getbudss, Utility.UrlDecode("http://passport.zongheng.com/?location=http%3A%2F%2Fwww.zongheng.com%2F"), "image/png,image/*;q=0.8,*/*;q=0.5");//請求頁面獲取cookie
           helper.GetPageResponse_Get(url_maindo, Utility.UrlDecode(bookLink), "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");//請求頁面獲取cookie
           helper.GetPageResponse_Post(url_getSession, postData_Session, bookLink);//獲取sessinID

//所有的cookie都收集完後,開始請求驗證碼
           Bitmap bp = helper.GetCode(string.Format("http://passport.zongheng.com/imgcapt?r={0}", Utility.GetTimeStamp()), bookLink);
           pictureBox.Image = bp;
       }
        #endregion

 好了,這個項目的所有功能到這裏就說完了,有什麼問題歡迎評論交流

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