C#模拟百度登陆并到指定网站评论回帖(五)

前面的四篇已经说完了所有的模拟百度登陆,接下来就是到指定的网站去发表评论,固然你也多是获取其余信息,其实这些套路都是万变不离其宗的,弄懂以后以为像这种请求-响应获取信息的功能实在很简单(想起当初走的弯路,真是太心酸了)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

 好了,这个项目的全部功能到这里就说完了,有什么问题欢迎评论交流

相关文章
相关标签/搜索