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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 27451|回复: 11

[其他] 登录阿里妈妈的post问题

[复制链接]
发表于 2013-6-3 17:22:11 | 显示全部楼层 |阅读模式
本人菜鸟,刚刚从易语言转过来学C#,也是从其他论坛上面看到苏飞的类的,用了就不能自拔了。。。的确非常好用,可惜也有很多地方无法理解的
最近无聊就写了个登录post,这个算是非常简单的一个了,下面是登录的包
请求地址:http://www.alimama.com/member/minilogin_act.htm
请求内容:_tb_token_=9Kn3WEwVNFm&style=&redirect=&proxy=http%3A%2F%2Fwww.alimama.com%2Fproxy.htm&logname="+帐号+"&originalLogpasswd="+密码+"&logpasswd="+密码的MD5值


请求内容里面有一个tb_token,这个值是随机生成的,在第一次访问页面的时候就会生成这个值,并且会设置到cookie里面去,但是我只有通过一次请求才可以知道这个值,然后再第二次post登录的时候,这个值就发送变化了,所以一直都登录不上去。
其实我的目的是想采集这个页面的宝贝http://u.alimama.com/union/sprea ... rchType=&q=2013
也问过不少人了,可惜都没有解决,已经确定是cookies的问题了,也就是说登录了以后再访问搜索页,就又退出了。。。登录后的cookies导入进去了也不行。。肯定是我设置出了问题,但是技术有限,实在是写不出来了,只有拜托哪个热心人帮我解决了。。如果能写个demo给我,再下感激不尽~

本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-6-3 17:27:23 | 显示全部楼层
贴下你的代码吧。
 楼主| 发表于 2013-6-3 17:39:27 | 显示全部楼层
[code=csharp]        bool 登录阿里妈妈(string zhanhao, string mima)
        {
            //取出token参数
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "http://www.alimama.com/member/minilogin.htm?&proxy=http://www.alimama.com/proxy.htm",
            };
            HttpResult result = http.GetHtml(item);
            string token = qwbzj(result.Html, "_tb_token_' type='hidden' value='", "'>");
            //进行登录
            item = new HttpItem()
            {
                URL = "http://www.alimama.com/member/minilogin_act.htm",
                Method = "post",
                Postdata = "_tb_token_=" + token + "&style=&redirect=&proxy=http%3A%2F%2Fwww.alimama.com%2Fproxy.htm&logname=" + zhanhao + "&originalLogpasswd=" + mima + "&logpasswd=" + md5(mima),
                //Cookie = result.Cookie
            };
            result = http.GetHtml(item);
            string ccc = result.Cookie;
            //判断登录状态
            item = new HttpItem()
            {
                URL = "http://u.alimama.com/union/myunion/myOverview.htm",
                Cookie = result.Cookie,
            };
            result = http.GetHtml(item);
            string login = result.Html;
            if (login.IndexOf("1") != -1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        #region 取文本中间
        public static string qwbzj(string str, string str1, string str2)
        {
            Regex regex = new Regex(string.Format("(?<={0}).*?(?={1})", str1, str2), RegexOptions.Compiled);
            Match match = regex.Match(str);
            if (match.Success)
            {
                return match.Value;
            }
            return string.Empty;
        }
        #endregion
        #region 取MD5
        string md5(string str)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string s = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)));
            s = s.Replace("-", "");
            return s.ToLower();
        }
        #endregion[/code]
发表于 2013-6-3 17:41:58 | 显示全部楼层
我没账户?呵呵。看不了,你要不再发一下抓到的包吧。感觉没你写的这么简单,肯定需要设置一下别的信息 比如头信息
 楼主| 发表于 2013-6-3 19:56:38 | 显示全部楼层
我测试了很久,还是没办法登录,主要问题就是出在登录上面了,老大说的没错,直接导入cookies是可以get那个页面的,那个token的值比较神奇,C#不想易的那个cookies是自动跟随的,所以在获取不到那个值的情况下,每一次的请求都会让之前获取的token失效,除非同时post出去,但是这种情况又不行。。没办法了
发表于 2013-6-3 21:16:50 | 显示全部楼层
先访问一下主页得到一个Token,然后使用这个Token进行登录,获取Cookie
然后带着Token和Cookie去获取列表
 楼主| 发表于 2013-6-4 01:26:02 | 显示全部楼层
老大,终于成功了,研究了一天呐,同时推荐一篇非常不错的文章,对我启迪很大啊:http://www.cnblogs.com/top5/archive/2010/04/11/1709457.html下面再贴一下源码,希望以后遇到同样问题的人可以解决
[code=csharp]        #region 取文本中间
        public static string qwbzj(string str, string str1, string str2)
        {
            Regex regex = new Regex(string.Format("(?<={0}).*?(?={1})", str1, str2), RegexOptions.Compiled);
            Match match = regex.Match(str);
            if (match.Success)
            {
                return match.Value;
            }
            return string.Empty;
        }
        #endregion
        #region 取MD5
        string md5(string str)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string s = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)));
            s = s.Replace("-", "");
            return s.ToLower();
        }
        #endregion
        string loginmama(string zhanhao,string mima)
        {
            //获取token值
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                UserAgent="Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0",
                Accept="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                URL = "http://www.alimama.com/index.htm",
            };
            HttpResult result = http.GetHtml(item);
            //开始登录
            HttpItem item1 = new HttpItem()
            {
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0",
                Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                ContentType = "application/x-www-form-urlencoded",
                Referer = "http://www.alimama.com/member/minilogin.htm?&proxy=http://www.alimama.com/proxy.htm",
                Cookie = result.Cookie,
                Method = "post",
                URL = "http://www.alimama.com/member/minilogin_act.htm",
                Postdata = "_tb_token_=" + qwbzj(result.Cookie, "_tb_token_=", ";") + "&style=&redirect=&proxy=http%3A%2F%2Fwww.alimama.com%2Fproxy.htm&logname=" + zhanhao + "&originalLogpasswd=" + mima + "&logpasswd=" + md5(mima)
            };
            HttpResult result1 = http.GetHtml(item1);
            //string ccc = result1.Cookie;
            q_cookies = result.Cookie;//由于登录成功之后是302转向(好像就不会返回任何cookies,之前这里也卡了一下),所以这里直接再次取一下之前的cookies
            //这里的q_cookies是我设置的全局变量,用于以后调用
            return "";
        }
[/code]

发表于 2013-6-4 07:58:13 | 显示全部楼层
佐υ佑 发表于 2013-6-4 01:26
老大,终于成功了,研究了一天呐,同时推荐一篇非常不错的文章,对我启迪很大啊:http://www.cnblogs.com/t ...

恩不错我给你收集到了Httphelper例子中了,
发表于 2013-6-29 12:38:52 | 显示全部楼层
我想请问现在你这个例子还能登录吗?
发表于 2015-10-6 22:50:19 | 显示全部楼层
留着应该有用,谢谢楼主分享!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-11-24 00:36

© 2014-2021

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