基本的实现功能前面已经全部讲完,基本上可以复制黏贴完成登录百度的过程了

今天的这一贴就说说怎么获取百度的验证码

内容回顾:还记得前面第一贴说的如果登录发生异常,百度会发回2个值吗?是的,就是codeType和codeString这两个值,用前面的JSON数据解析可以分别获取。

前面也说到codeType是不变的(至少同一次请求时不变)。请求验证码的时候会要求传递这个参数,所以要想得到正确的验证码,这个参数是必不可少的,否则你请求多少次都是一个错误的验证码!

具体代码入下:

//封装更换验证码
        public void ReGetCode() 
        {
            string reSet_code = string.Format("https://passport.baidu.com/v2/?reggetcodestr&token={0}&tpl=zongheng&apiver=v3&tt={1}&fr=login&vcodetype={2}&callback=bd__cbs__ta1xss", token, Utility.GetTimeStamp(),vcodeType);
            string codeContent = helper.GetPageResponse_Get(reSet_code, Utility.UrlDecode("http://passport.zongheng.com/?location=http%3A%2F%2Fwww.zongheng.com%2F"),"*/*");
                    if (_regex.IsMatch(codeContent))
                        codeContent = _regex.Match(codeContent).Value;
                    var codeResult = JsonConvert.DeserializeObject<Reget_Code>(codeContent);
                    _codestring = codeResult.Data_Code.VerifyStr;
                    string url_NewCode = string.Format("https://passport.baidu.com/cgi-bin/genimage?{0}", _codestring);
                  Bitmap bp= helper.GetCode(url_NewCode, Utility.UrlDecode("http://passport.zongheng.com/?location=http%3A%2F%2Fwww.zongheng.com%2F"));
                  pictureBox1.Image = bp;
        }

可能这样单独看,有人会看不懂什么意思,这里就注释一下

reSet_code 是代表获取codestring的网页,后面的参数分别是前面获取到的token、生成的时间戳、以及codeType

codeContent 代表请求网页后返回的内容,参数就是用到前面的HTTPHelper类的Post方法需要提供的参数

接下来是分析内容,获取codestring,然后对验证码的图片网页重新发起请求,将验证码显示回picturebox上

至于codeType怎么来的,这个在请求登录的时候,发生异常就会返回

下面是检验验证码是否正确的方法,在文本框输入了验证码之后按回车

private void txtcode_KeyDown(object sender, KeyEventArgs e)
        {

if (e.KeyCode == Keys.Enter)
                    {

Thread th_2 = null;
                    if (e.KeyCode == Keys.Enter)
                    {
                        th_2 = new Thread(() =>
                            {
                                verifycode = txtcode.Text;
                                //先访问一次验证码校验页面,看看验证码是否正确
                                string url_checkCode = string.Format("https://passport.baidu.com/v2/?checkvcode&token={0}&tpl=zongheng&apiver=v3&tt={1}&verifycode={2}&codestring={3}&callback=bd__cbs__nm74kc", token, Utility.GetTimeStamp(), verifycode, _codestring);
                                string checkcode = helper.GetPageResponse_Get(url_checkCode, Utility.UrlDecode("http://passport.zongheng.com/?location=http%3A%2F%2Fwww.zongheng.com%2F"), "*/*");
                                if (_regex.IsMatch(checkcode))
                                    checkcode = _regex.Match(checkcode).Value;
                                var code_msg = JsonConvert.DeserializeObject<CheckvCode>(checkcode);
                                CodeMsg(code_msg.ErrInfo.No);
                                if (code_msg.ErrInfo.No != "0")
                                    return;
                                LoginStatus status = Login(verifycode, _codestring, token, raskey, userIndex);
                                GoComment_Page(status);
                                th_2.Abort();
                            });
                        th_2.Start();
                        th_2.IsBackground = true;

}

}

好了,今天就到这里,如果有问题,欢迎评论交流~

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

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

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

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

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

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

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

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

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

  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. Redundant Paths-POJ3177(强连通缩点)

    http://poj.org/problem?id=3177 题目大意:给你几个点和几条边   求你能加几条边  就可以让每一个点到达任意点都有两种方法. Description In order t ...

  2. Elasticsearch学习系列之mapping映射

    什么是映射 为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本(Full-text)或精确(Exact-value)的字符串值,Elasticsearch需要知道每个字段里面 ...

  3. Windows Server2008 R2 设置NAT 让Hyper-V连接Internet

    1.添加虚拟网卡,设置为内部,并且固定IP地址192.168.1.1 255.255.255.0 此为内网网卡 2.添加服务器角色:DHCP服务器,DNS服务器,网络策略和访问服务 3."网 ...

  4. Android Studio签名打包应用

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50812391 可直接看看以下的Android Studio中签名应用 Android要 ...

  5. Mysql-SQL优化-统计某种类型的个数

    有时我们想统计某种类型有多少个,会用这个SQL. 全表扫描之余,还要filesort.耗时1.34秒. mysql> select country,count(*) from t1 group ...

  6. influxDB+telefraf+grafana

    此贴自己记录 下载grafana https://grafana.com/grafana/download?platform=windows 从官网下载influxDB\telefraf的方法 : h ...

  7. [DevExpress]设置列的时间格式

    方法一 设置DisplayFormatFormatString:gFormatType:DateTime 方法二

  8. 使用逆向工程生成mybatis的Mapper文件

    之前有写过一篇博客: 使用MyBatis Generator自动生成MyBatis的代码链接:http://www.cnblogs.com/klslb/p/6908535.html 这个太麻烦了,而且 ...

  9. shell脚本,根据字符串获取行号的

    awk中不能解析shell变量,建议做法是通过-v传递进去: 1 typeline=`cat $typepath | awk -v str="$typetmp" '/str/{pr ...

  10. YTU 2520: 小慧唱卡拉OK

    2520: 小慧唱卡拉OK 时间限制: 1 Sec  内存限制: 128 MB 提交: 478  解决: 207 题目描述 小慧唱歌非常好听,小鑫很喜欢听小慧唱歌,小鑫最近又想听小慧唱歌了,于是小鑫请 ...