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

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

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

内容回顾:还记得前面第一贴说的如果登录发生异常,百度会发回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;

}

}

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

时间: 2024-08-02 17:03:25

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

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

前面的四篇已经说完了全部的模拟百度登录,接下来就是到指定的网站去发表评论,当然你也可能是获取其他信息,其实这些套路都是万变不离其宗的,弄懂之后觉得像这种请求-响应获取信息的功能实在很简单(想起当初走的弯路,真是太心酸了) 今天的详细评论过程就不多说了,这里就指出一下我在写这个功能的时候遭遇的问题,也正是这些问题导致陷入了困境.(主要是理论,有不懂的童鞋欢迎评论交流) 第一个问题:如果使用的百度登录网站,那么前面我们获取到BDUSS之后,到这里就要发生转换.因为我访问的网页,在访问主页的时候会通过

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

核心信息: 请求网址:  https://passport.baidu.com/v2/api/?login请求方法:  POST状态码:  HTTP/1.1 200 OK请求头 //用户代理 UserAgent,是指浏览器,它的信息包括硬件平台.系统软件.应用软件和用户个人偏好.在X.400电子系统中,用户代理是一种对数据打包.创造分组头,以及编址.传递消息的部件.用户代理并不是仅指浏览器,还包括搜索引擎. User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW

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

上次说到怎么获取BAIDUID,这个相信很多人都能够拿到就不多说了,今天一连说两个,获取token和raskey 2.利用以上获得的cookie直接访问页面 https://passport.baidu.com/v2/api/?getapi&tpl=zongheng&apiver=v3&tt=1441287460704&class=login&gid=26D2A76-9D6C-4EBE-8687-25C6591194B2&logintype=basicLog

模拟百度登录并到指定网站评论回帖

http://www.zfs.cn/home.php?mod=space&uid=674782&do=profile&from=spacehttp://www.zfs.cn/home.php?mod=space&uid=674783&do=profile&from=spacehttp://www.zfs.cn/home.php?mod=space&uid=674784&do=profile&from=spacehttp://www.z

C#模拟百度登录

目录: 1.fiddler解析百度登录地址 2.处理传入参数 1.fiddler解析百度登录地址 因工作需要,所以研究了下百度的登陆.首先打开https://passport.baidu.com/v2/?login,我们用fiddler很快就能找到百度的登录入口https://passport.baidu.com/v2/api/?login .如下图: 在登录入口https://passport.baidu.com/v2/api/?login 之前,百度先会去获取publickey和token.

模拟百度空间登录

我的个人博客( 肥龙的博客)发表了新文章了! 欢迎大家过来阅读,以下是文章的连接地址 http://www.comingcode.com/?p=357 由于自己有了个人的博客,但是又想提高点曝光率,所以就想到如何将自己的博客在其他网站曝光多点,当然最恶心的就是到每个网站或论坛上面发广告,这样不但可以增加曝光度,同样也能拉点仇恨.不管出于什么目的,如果是想在各个网站上手动一条条发的话,估计这个人也够忙的了. 学习了python后,就可以实现自动将博客同步到别的网站上了,要做的只是模拟用户登录,然后

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

原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章利用了 HttpWebRequest 和 HttpWebResponse 模拟登录了有验证码的网站. 程序设计的界面很简单,三个TextBox分别输入用户名.密码和验证码,一个Image控件显示从网站请求到的验证码图片,还有两个按钮,一个换验证码,一个登录. 写程序前,先用浏览器的开发者工具观察下登

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

需要用程序模拟登录一个网站,登录的时候需要填写验证码. 设计的界面很简单: 写程序前,先用浏览器的开发者工具观察下登录页面有什么请求,我这里用的是 FireBug,下面两个图是在 FireBug 的网络面板中截的. 可以看到打开登录页面时有个 GET 请求验证码的,在 FireBug 中可以看到: 上面的图上可以看到这一句: Set-Cookie GUID=c89eabb62d9d4f35b491a8afd371b4ad; path=/ 这里请求的验证码页面保存了一个Cookie. 然后我们输入

python模拟自动登录网站(urllib2)

不登录打开网页: import urllib2 request = urllib2.Request('http://www.baidu.com') response = urllib2.urlopen(request).read() print response 保存网页图片(https://www.baidu.com/img/bd_logo1.png): picurl = 'https://www.baidu.com/img/bd_logo1.png' #定义图片的url地址 req = ur