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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

楼主: YoYo-You

[求助] 完成小米抢购的一些心得.

[复制链接]
发表于 2014-6-16 12:23:56 | 显示全部楼层
xjwebs 发表于 2014-6-15 18:03
想了一下,好像没看到验证码输入的地方,可能楼主没有截图出验证码界面,又或者接入了后台自动打码功能吧。 ...

貌似小米抢购过程里现在不用验证码的啊


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-6-16 12:24:26 | 显示全部楼层
求购源码啊。楼主好像消失很久了。
发表于 2014-6-17 11:30:52 | 显示全部楼层
受教了,学习中……
 楼主| 发表于 2014-6-17 16:35:11 | 显示全部楼层
本帖最后由 YoYo-You 于 2014-6-17 16:49 编辑
xjwebs 发表于 2014-6-15 18:03
想了一下,好像没看到验证码输入的地方,可能楼主没有截图出验证码界面,又或者接入了后台自动打码功能吧。 ...

formatFk: function(a) {
                        var b = xmCookie(this.cookies.userId),
                        c = (b % a).toString().substr( - 4, 4);
                        switch (c.length) {
                        case 1:
                                this.fkNum = "000" + c;
                                break;
                        case 2:
                                this.fkNum = "00" + c;
                                break;
                        case 3:
                                this.fkNum = "0" + c;
                                break;
                        case 4:
                                this.fkNum = c
                        }
                        for (var d, e = this.fkNum.split(""), f = "", g = 0; g < e.length; g += 1) d = parseInt(9 * Math.random()),
                        f += d + "<i>" + e[g] + "</i>";
                        $("#fkNumTxt").html(f),  
                        $(".J_fkAction").show().siblings(".J_fkLoading").hide()
                }   

a是通过ajax获取的难后跟在跟你的userId% 最后来几个随机,其实这几个随机是忽悠你最后成为84071724这样的数字,其实有用的是4774难后传到后台反算就知道你的验证码对不对了,84071724大家可以去看你的验证码,下划线他是不变的,cookie里面有里的userId,这个是后台获取的地址也就是a的值你们登入后在浏览器敲http://tp.hd.mi.com/getmode/cn,用这种取验证码还需要什么打码吗?
 楼主| 发表于 2014-6-17 16:55:21 | 显示全部楼层
本帖最后由 YoYo-You 于 2014-6-17 17:05 编辑

还有就是源码问题,只要照HttpHelp上面的获取Cookie方法不就可以获取了吗.这里需要注意的是比如有些是ajax Cookie一定要要是string类型,不要加  ResultCookieType = ResultCookieType.CookieCollection,这个,会让返回不了Cookie的值,反正就一句话如果CookieCollection获取不了就用Cookie,还有就是有些页面是301的要跳转的,你要几次才能有真正的Cookie下面是我刚搞的小米竞猜足球的代码.
//竞猜足球代码
private void PlayBoxThread()
        {
            if (rboBox1.Checked || rboBox2.Checked)
            {
                int a = rboBox1.Checked ? 1 : 3;
                int i = 0;
                foreach (string key in dic.Keys)
                {

                    if (dic[key] == null || dic[key].Equals("")) //dic[key]里面放的是登入后的Cookie这个论坛很多人又发了这样的代码如果登入Cookie的代码的
                    {
                        ajaxcookies.Add("");
                        continue;
                    }
                    string CookiesSrt = getCookieString(dic[key]);
                    HttpItem BoxItem = new HttpItem()
                    {
                        ResultCookieType = ResultCookieType.CookieCollection,
                        URL = "http://i.huodong.mi.com/guessworldcup/default/getcurguess?jsonpcallback=?",
                        Method = "GET",
                        Host = "i.huodong.mi.com",
                        Cookie = CookiesSrt
                    };

                    HttpHelper Box_helper = new HttpHelper();
                    HttpResult Box_resultes = Box_helper.GetHtml(BoxItem);
                    CookiesSrt += getCookieString(Box_resultes.CookieCollection);
                    string boxjson = Regex.Match(Box_resultes.Html.Trim(), "(?<=.\\().*\\)").ToString().Replace(")", "");
                    BoxInfo boxobj = JsonConvert.DeserializeObject<BoxInfo>(boxjson);
                    ajaxcookies.Add(CookiesSrt);

                    if (boxobj.code == 1)
                    {

                       
                        HttpItem UserItem = new HttpItem()
                        {
                            URL = "http://i.huodong.mi.com/guessworldcup/default/getuserinfo?jsonpcallback=?",
                            Method = "GET",
                            Host = "i.huodong.mi.com",
                            Cookie = CookiesSrt,
                        };

                        HttpHelper User_helper = new HttpHelper();
                        HttpResult User_resultes = User_helper.GetHtml(UserItem);
                        boxjson = Regex.Match(User_resultes.Html.Trim(), "(?<=.\\().*\\)").ToString().Replace(")", "");
                        Boxinfo2 boxobj1 = JsonConvert.DeserializeObject<Boxinfo2>(boxjson);



                        if (boxobj.code == 1)
                        {


                            HttpItem submitboxitem = new HttpItem()
                            {
                                URL = string.Format("http://i.huodong.mi.com/guessworldcup/default/vote/?cid={0}&type={1}&v=1&jsonpcallback=setbox", boxobj.info.cid, a),

                                Method = "GET",
                                Cookie = CookiesSrt,
                                Host = "i.huodong.mi.com",
                                ContentType = "text/html; charset=utf-8"


                            };
                            Box_helper = new HttpHelper();
                            Box_resultes = Box_helper.GetHtml(submitboxitem);
                            boxjson = Regex.Match(Box_resultes.Html.Trim(), "(?<=setbox\\().*\\)").ToString().Replace(")", "");
                            BoxAnswer BoxAnswer = JsonConvert.DeserializeObject<BoxAnswer>(boxjson);
                            Other_Method DMSGD = new Other_Method(showListBoxText);
                            this.BeginInvoke(DMSGD, new object[] { 3, BoxAnswer.info, i });
                            i++;

                        }
                    }

                    Thread.Sleep(IControl.THREADSELLP);
                }
            }
        }
//砸蛋的代码
  private void ZaCaiDan()
        {
            int i = 0;
            foreach (string c in ajaxcookies)
            {
             //C也是cookie这里需要注意到的是一定要完成上面的"http://i.huodong.mi.com/guessworldcup/default/getcurguess?jsonpcallback=?这个会返回一个Cookie这个Cookie是一个权限Id

                if ( c.Equals(""))               
             {
                    continue;
                }
      
                HttpItem BoxItem = new HttpItem()
                {
      
                    URL = "http://i.huodong.mi.com/guessworldcup/default/getxiaomiprize?m=0&jsonpcallback=getdan",
                    Method = "GET",
                    Host = "i.huodong.mi.com",
                    Cookie = c
                };
                HttpHelper Box_helper = new HttpHelper();
                HttpResult Box_resultes = Box_helper.GetHtml(BoxItem);
                string boxjson = Regex.Match(Box_resultes.Html.Trim(), "(?<=getdan\\().*\\)").ToString().Replace(")", "");
                CaiDan boxobj = JsonConvert.DeserializeObject<CaiDan>(boxjson);
                Other_Method DMSGD = new Other_Method(showListBoxText);

                if (boxobj.code == 1 && (boxobj.data == 0 || boxobj.data == 1 || boxobj.data == 2 || boxobj.data == 3 || boxobj.data == 4 || boxobj.data == 5 || boxobj.data == 6))
                {
                    this.BeginInvoke(DMSGD, new object[] { 3, boxobj.info, i });
                }
                else {

                    this.BeginInvoke(DMSGD, new object[] { 3, boxobj.info, i });
                }
                i++;

                Thread.Sleep(IControl.THREADSELLP);



            }
        }
1.jpg


 楼主| 发表于 2014-6-17 17:11:04 | 显示全部楼层
24楼 25楼有我最新发表的一些信息 呵呵
发表于 2014-6-18 10:58:28 | 显示全部楼层
确定好东西
发表于 2014-6-18 15:50:52 | 显示全部楼层
学习中,有没有源码····
发表于 2014-6-21 23:27:00 | 显示全部楼层
最近也在做这样的程序,确实发现好多cookie抓不到,也在看小米的代码,跟楼主一样,看的好头疼。
发表于 2014-6-22 17:21:19 | 显示全部楼层
表示不懂,不过还是要支持楼主
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-5-29 17:14

© 2014-2021

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