前面的四篇已經說完了所有的模擬百度登陸,接下來就是到指定的網站去發表評論,固然你也多是獲取其餘信息,其實這些套路都是萬變不離其宗的,弄懂以後以爲像這種請求-響應獲取信息的功能實在很簡單(想起當初走的彎路,真是太心酸了)html
今天的詳細評論過程就很少說了,這裏就指出一下我在寫這個功能的時候遭遇的問題,也正是這些問題致使陷入了困境。(主要是理論,有不懂的童鞋歡迎評論交流)ajax
第一個問題:若是使用的百度登陸網站,那麼前面咱們獲取到BDUSS以後,到這裏就要發生轉換。由於我訪問的網頁,在訪問主頁的時候會經過BDUSS去繼續請求,得到一個該網站的新BDUSS,這就說明,前面搞了那麼多功夫我們其實也就只拿到了一條鑰匙罷了。要想打開信息之門,還須要咱們再去打開其餘的門。cookie
那這裏要說的仍是——邏輯分析,這個過重要了,進入新網站以後咱們須要從新進行分析,找到主要的請求響應頁,有時候網頁會發生屢次跳轉,信息也會跟着變化。若是真要徹底模擬的話 ,咱們要作的功夫就會不少,因此這裏咱們只要找出那些有咱們須要的信息的請求響應頁就能夠了。session
好比說我要得到網站本身的BUDSS,那麼就聯繫先後內容,看看哪一個頁面用到新的BUDSS,而後再追溯回頭,慢慢排除,直到找到響應哪一個BDUSS的頁面。這個過程就是考驗耐心跟細心的了跟其餘沒有啥關係。app
那第二個問題:就是Cookie!這個跟前面的一個要素是肯定功能是否可以順利實現的絕對條件,沒有這兩個,代碼寫多少都是錯!dom
因此,到新網站的時候,必定要分析有哪些新的Cookie,而後把他們全都收集起來。我就是在寫評論功能的時候,獲取網站的驗證碼,雖然能拿到,但老是發生錯誤,這就是沒有拿到sessionID跟cookie的後果。請求網頁的驗證碼,必需要這兩個東西,若是你看到本身的錯了,那麼就看看cookie收集器裏面有沒有這些值!由於網站要識別你是否是同一我的拿的驗證碼而後提交,看得就是sessionID,因此必須有這個值。post
下面是具體的實現代碼:這裏你們不用瞭解太深,只須要知道下面的代碼就是不停的請求不一樣的頁面,而後獲取響應,直到把請求驗證碼頁面須要的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);//獲取sessinIDurl
//全部的cookie都收集完後,開始請求驗證碼
Bitmap bp = helper.GetCode(string.Format("http://passport.zongheng.com/imgcapt?r={0}", Utility.GetTimeStamp()), bookLink);
pictureBox.Image = bp;
}
#endregionspa
好了,這個項目的全部功能到這裏就說完了,有什麼問題歡迎評論交流