http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3321|回复: 2

[其他] 飞哥,请花点时间帮我看看

[复制链接]
发表于 2013-10-23 19:05:30 | 显示全部楼层 |阅读模式
写了个登陆pcbeta的程序, http://bbs.pcbeta.com/member.php?mod=logging&action=login, 每一次登陆都需要验证码,现在验证码能获取到了,但验证时老是验证不对,附件里有源码.飞哥,帮我看看哪有问题?调了一天都没挑出问题了

PcbetaCode.zip

83.34 KB, 下载次数: 135, 下载积分: 金钱 -1

pcbeta登陆



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-10-24 07:55:47 | 显示全部楼层
以后直接贴代码,这样我还得配环境,等我回公司吧,现在没办法看

获取验证码要带登录时的Cookie,Cookie是同一样,不然不能当成是一次会话
 楼主| 发表于 2013-10-24 18:03:06 | 显示全部楼层
站长苏飞 发表于 2013-10-24 07:55
以后直接贴代码,这样我还得配环境,等我回公司吧,现在没办法看

获取验证码要带登录时的Cookie,Cookie ...

每一次请求我都会把返回的cookie付给下次请求
下面是源码,3个out参数是登陆时的种子
private static HttpResult GetCode(out string loginHash, out string seccode, out string formHash)
        {
            // 请求登陆页,并获取有用参数信息
            HttpItem item = new HttpItem()
            {
                URL = "http://bbs.pcbeta.com/member.php?mod=logging&action=login",
                Method = "GET",
                Host = "bbs.pcbeta.com",
                Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0",

            };
            HttpHelper http = new HttpHelper();
            HttpResult result = http.GetHtml(item);
            Regex reg_Seccode = new Regex(@"(?<=seccodeverify_).*?(?="")", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            Regex reg_LoginHash = new Regex(@"(?<=loginhash=).*?(?="")", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            Regex reg_FormHash = new Regex(@"(?<=name=""formhash"" value="").*?(?="")", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            // 3个参数
            loginHash = reg_LoginHash.Match(result.Html).Value;
            seccode = reg_Seccode.Match(result.Html).Value;
            formHash = reg_FormHash.Match(result.Html).Value;

            // 获取验证码,第一次请求
            item.URL = string.Format("http://bbs.pcbeta.com/misc.php?mod=seccode&action=update&idhash={0}&inajax=1&ajaxtarget=seccode_{0}", seccode);
            item.Cookie = result.Cookie;
            result = http.GetHtml(item);
            Regex reg_Update = new Regex(@"(?<=update=).*?(?=&)", RegexOptions.Multiline | RegexOptions.IgnoreCase);
            string update = reg_Update.Match(result.Html).Value;

            // 获取验证码,第二次请求
            item.URL = string.Format("http://bbs.pcbeta.com/misc.php?mod=seccode&update={0}&idhash={1}", update, seccode);
            item.Accept = "image/png,image/*;q=0.8,*/*;q=0.5";
            item.Referer = "http://bbs.pcbeta.com/member.php?mod=logging&action=login";
            item.ResultType = ResultType.Byte;
            item.Cookie = result.Cookie;
            result = http.GetHtml(item);

            // 验证码本地输出
            ImageHelper.ConvertByteToImg(result.ResultByte, @"D:\a.png");

            // 验证码验证请求,需要将验证码附到url后面
            item.URL = "http://bbs.pcbeta.com/misc.php?mod=seccode&action=check&inajax=1&&idhash=" + seccode + "&secverify=" + "";
            item.Referer = "http://bbs.pcbeta.com/member.php?mod=logging&action=login";
            item.Header.Add("x-requested-with", "XMLHttpRequest");
            item.Cookie = result.Cookie;
            result = http.GetHtml(item);
            return result;
        }

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-23 10:57

© 2014-2021

快速回复 返回顶部 返回列表