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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 4736|回复: 6

[HttpHelper] 写登陆小米时的困惑(被困扰了两天了)

[复制链接]
发表于 2014-10-24 15:33:03 | 显示全部楼层 |阅读模式
18金钱
[C#] 纯文本查看 复制代码
            HttpItem itemSign = new HttpItem()          
            {
                URL = "http://order.mi.com/site/login?ac=1",
                Method = "get",
                Allowautoredirect = true
            };
            HttpHelper http = new HttpHelper();
            HttpResult httpresult = http.GetHtml(itemSign);
            Cookies = httpresult.Cookie;


            string CallBack = System.Uri.EscapeDataString(Regex.Match(httpresult.Html, "callback:\"([\\s\\S]*?)\"").Groups[1].Value.Trim());
            string SID = System.Uri.EscapeDataString(Regex.Match(httpresult.Html, "sid:\"([\\s\\S]*?)\"").Groups[1].Value.Trim());
            string QS = System.Uri.EscapeDataString(Regex.Match(httpresult.Html, "qs:\"([\\s\\S]*?)\"").Groups[1].Value.Trim());
            string SIGN = System.Uri.EscapeDataString(Regex.Match(httpresult.Html, "\"_sign\":\"([\\s\\S]*?)\"").Groups[1].Value.Trim());

            string HIDDEN = System.Uri.EscapeDataString(Regex.Match(httpresult.Html, "hidden:\"([\\s\\S]*?)\"").Groups[1].Value.Trim());
         
            string serviceParam = System.Uri.EscapeDataString(Regex.Match(httpresult.Html, "serviceParam :\'([\\s\\S]*?)\'").Groups[1].Value.Trim());
           // textBox3.Text = "CallBack=" + CallBack + "--SID=" + SID + "--SIGN=" + SIGN + "--QS=" + QS + "--HIDDEN=" + HIDDEN + "--serviceParam=" + serviceParam;

            //登陆Post
            HttpItem item = new HttpItem()        
            {
                URL = "https://account.xiaomi.com/pass/serviceLoginAuth2",
                Method = "POST",
                Referer = "https://account.xiaomi.com/pass/serviceLogin",
                ContentType = "application/x-www-form-urlencoded",
                Postdata = string.Format("user={1}&_json=true&pwd={2}&callback={3}&sid={4}&qs={5}&hidden={6}&_sign={7}&serviceParam={8}",
                "", username, password, CallBack, SID, QS, HIDDEN, SIGN, serviceParam)
            };
            HttpResult result = http.GetHtml(item);
            
       //     richTextBox1.Text = result.Html;
            string bb =result.Cookie;
          
            //抓包看到的第二个跳转的url

            string loginurl = "https://account.xiaomi.com"+Regex.Match(result.Html, "\"location\":\"([\\s\\S]*?)\"").Groups[1].Value.Trim();

         //   MessageBox.Show(result.Html);


            //个人中心url

            String uidurl = "https://account.xiaomi.com/pass/userInfo?userId=" + Regex.Match(result.Html, "userId\":\\d{1,10}").Value.Replace("userId\":", "");

           // MessageBox.Show(uidurl);
         
            item = new HttpItem()
            {
                URL = loginurl,
                Cookie =bb
            };
            result = http.GetHtml(item);



           
            string html = result.Html;

           


            string cookie = result.Cookie;

            MessageBox.Show(cookie);

            string twourl = Regex.Match(html, @"(?i)<a\shref=['""](?<href>.*?)['""].*?>here</a>
").Groups["href"].Value;

           // textBox3.Text = html +"<------->"+twourl;




            item = new HttpItem()
            {
                URL = twourl,
                Cookie = cookie
            };
          

            result = http.GetHtml(item);//成功到个人账户页面

            //这个cookie 为什么不对? 我抓包的结果这里应该就是最后的cookie吧
            string coo1 = result.Cookie;
            textBox3.Text  = coo1;

            //这个cookie访问个人中心不行

            item = new HttpItem()
            {
                URL = loginurl,
            };
            result = http.GetHtml(item);




            string html1 = result.Html;
            richTextBox1.Text = html1;


代码如上,自己按照手动登陆抓包一步一步写的,但是为什么最后得出来的cookie是不可以用的。。  每一步得出cookie都是不可以访问购物车一类的。迷惑了, 自己 刚接触C#不久 求大大们解答

最佳答案

查看完整内容

应该是格式不对。把Cookie简化一下http://www.sufeinet.com/thread-10019-1-1.html


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-10-24 15:33:04 | 显示全部楼层
应该是格式不对。把Cookie简化一下http://www.sufeinet.com/thread-10019-1-1.html
回复

使用道具 举报

 楼主| 发表于 2014-10-24 22:40:01 | 显示全部楼层

求飞哥搭救 刚才试了用HttpHelper.GetSmallCookie格式化cookie之后 还是不可以 访问个人页一直oauth_nonce参数不合法
回复

使用道具 举报

 楼主| 发表于 2014-10-24 22:46:09 | 显示全部楼层
站长苏飞 发表于 2014-10-24 21:20
应该是格式不对。把Cookie简化一下http://www.sufeinet.com/thread-10019-1-1.html

而且我发现第一次格式化cookie之后 经过getsmallcookie精简之后 cookie里居然有两个passToken项。 飞哥 getsmallcookie可否再加一个参数可以自定义要去重复的项
回复

使用道具 举报

 楼主| 发表于 2014-10-25 13:28:06 | 显示全部楼层
解决了 自己把cookie的每个字段分解之后 和自己手动登陆的cookie做对比 然后把格式按照手动的格式 去掉没用的字段 就ok了
回复

使用道具 举报

发表于 2014-10-25 21:09:51 | 显示全部楼层
我只是路过打酱油的。
回复

使用道具 举报

发表于 2014-10-29 22:22:38 | 显示全部楼层
过来学习学习
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 06:59

© 2014-2021

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