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

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

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

    [题意]两只手,一次只能用一只手按一个键子(0,1,2,3),给出从i键到j键所需的消耗的体力,求依次按下一系列键子所需最小体力. [分析] 法一:开一个三维数组,分别记录移动到位置及左右手按的键子. ...

  2. 【进击后端】mongodb入门

    环境:ubuntu 重要字:数据库,集合,记录,字段 api地址:https://docs.mongodb.com/manual/reference/method/db.collection.upda ...

  3. cogs 48. [NOIP2007] 字符串的展开

    48. [NOIP2007] 字符串的展开 ★☆   输入文件:expand.in   输出文件:expand.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 在初赛普 ...

  4. hibernate之多对一单向关联

    一个工作组(Group)里能够有多个用户(User),一个User仅仅属于一个Group,这是典型的多对一的关系. 在多对一的关系中正确的数据库设计是在多的这方(在这里是User这方)加一个Group ...

  5. CentOS command

    管理centos服务器的时候常会对文件进行一些常规操作,除了ftp之外了解在ssh下必要的文件操作命令那也是必不可少的,以下摘录一些常用的文件操作命令: 文件操作: ls ####查看目录中的文件## ...

  6. Android进程间通信之内部类作为事件监听器

    在Android中,使用内部类能够在当前类里面发用改监听器类,由于监听器类是外部类的内部类.所以能够自由訪问外部类的全部界面组件. 下面是一个调用系统内部类实现短信发送的一个样例: SMS类: pac ...

  7. C# .NET Visual Studio VS2008如何显示行号

    工具-选项,然后勾选"显示所有设置",然后在文本编辑器下面找到所有语言,勾选"行号"即可.  

  8. linux驱动之中断方式获取键值

    linux驱动之中断方式获取键值 ----------------------------------------------------------------------------------- ...

  9. android:省市县三级联动(基于json和spring)

    一.请看效果图": 二.程序的代码: 1.MainActivity.java package com.loveplusplus.loader.demo.ui; import org.json ...

  10. android:模拟水波效果的自己定义View

    Github地址:https://github.com/nuptboyzhb/WaterWaveView 欢迎Fork.欢迎Star 1.先看效果 watermark/2/text/aHR0cDovL ...