前面的四篇已经说完了全部的模拟百度登录,接下来就是到指定的网站去发表评论,当然你也可能是获取其他信息,其实这些套路都是万变不离其宗的,弄懂之后觉得像这种请求-响应获取信息的功能实在很简单(想起当初走的弯路,真是太心酸了)

    今天的详细评论过程就不多说了,这里就指出一下我在写这个功能的时候遭遇的问题,也正是这些问题导致陷入了困境。(主要是理论,有不懂的童鞋欢迎评论交流)

    第一个问题:如果使用的百度登录网站,那么前面我们获取到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

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

C#模拟百度登录并到指定网站评论回帖(五)的更多相关文章

  1. C#模拟百度登录并到指定网站评论回帖(一)

    核心信息: 请求网址:  https://passport.baidu.com/v2/api/?login请求方法:  POST状态码:  HTTP/1.1 200 OK请求头  //用户代理 Use ...

  2. C#模拟百度登录并到指定网站评论回帖(二)

    序言: 回归正题:前面讲到的抓包分析的数据,是模拟登录要获得得必要信息(当然有些也不是必要的...我只是都列举出来这样有个对比)如果说,有哪个英文字母不知道什么意思的,可以问一下度娘,有不少前辈都发过 ...

  3. C#模拟百度登录并到指定网站评论回帖(三)

    上次说到怎么获取BAIDUID,这个相信很多人都能够拿到就不多说了,今天一连说两个,获取token和raskey 2.利用以上获得的cookie直接访问页面 https://passport.baid ...

  4. C#模拟百度登录并到指定网站评论回帖(四)

    基本的实现功能前面已经全部讲完,基本上可以复制黏贴完成登录百度的过程了 今天的这一贴就说说怎么获取百度的验证码 内容回顾:还记得前面第一贴说的如果登录发生异常,百度会发回2个值吗?是的,就是codeT ...

  5. POST模拟百度登录和自动发帖

    这里用HttpClient发包模拟百度登录和发帖,验证码部分采用机器下载人工识别. 登陆百度的原理:1. 访问https://passport.baidu.com/v2/api/?getapi& ...

  6. C#模拟百度登录

    目录: 1.fiddler解析百度登录地址 2.处理传入参数 1.fiddler解析百度登录地址 因工作需要,所以研究了下百度的登陆.首先打开https://passport.baidu.com/v2 ...

  7. go 语言模拟百度登录

    1.参考网上Python的例子自己写了一个go语言的.这个仅供学习技术参考,为了方便有部分参数直接phantomjs执行js获取,代码基本都有注释,测试打印没有删除,还请见谅! 2.本文参考http: ...

  8. 通过winform+模拟登录实现快速一键登录到人才招聘网站

    之前为了便于人事部门招聘登录网站更简洁高效,免去每天频繁输网址.用户名.密码等相关登录信息,特基于winform+HttpWebRequest实现模拟请求登录,最终达到一键登录到招聘网站后台的效果. ...

  9. C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站

    原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...

随机推荐

  1. Delphi:校验手机号及身份证号

    //校验手机号  function IsMobileNumber( num:string ):boolean;   begin     Result:=False;     if length( tr ...

  2. Same Tree (二叉树DFS)

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  3. FJNUOJ1158(莫比乌斯反演)

    题目:给定n个数字a1...an.有m个询问,格式为L R X Y,意为求aL到aR之间与x的最大公因数为y的个数. 数据组数T<=20 1<=n,m<=1e5 1<=ai&l ...

  4. 权限框架之Shiro详解(非原创)

    文章大纲 一.权限框架介绍二.Shiro基础介绍三.Spring Boot整合Shiro代码实战四.项目源码与资料下载五.参考文章   一.权限框架介绍 1. 什么是权限管理   权限管理属于系统安全 ...

  5. xming + putty remote GUI

    xming 和putty的配置网上有很多 但是在使用时发现有个问题, 记录一下. 在配置完成后,远程运行图形化程序经常会说can not open display等错误. 这有可能是因为xming的安 ...

  6. cocos2d-x中绘制3D图形--3D ToolKit for cocos2dx实现原理

    首先:了解具体情况请看这里:https://github.com/wantnon2/3DToolKit-for-cocos2dx 在看代码之前,最好还是先把项目git下来执行一下demoproject ...

  7. Ubuntu如何开启root账户登录

    1 首先设置root密码,利用现有管理员帐户登陆Ubuntu,在终端执行命令:sudo passwd root,接着输入密码和root密码,重复密码.这样就有了可用的root用户.   2 打开一个终 ...

  8. mysql查看所有存储过程,函数,视图,触发器,表

    查询数据库中的存储过程和函数 方法一: select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' ...

  9. hiho一下 第五十一周(有向图欧拉路径)51

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  10. iOS开发系列- 视频MPMoviePlayerController

    MPMoviePlayerController 在iOS中播放视频可以使用MediaPlayer.framework种的MPMoviePlayerController类来完成,它支持本地视频和网络视频 ...