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

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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com