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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 7373|回复: 6

[求助] 模拟登录 DZ 3.1成功,用此时的COOKIE访问首页又提示未登录了

[复制链接]
发表于 2014-5-27 22:05:25 | 显示全部楼层 |阅读模式
本帖最后由 阿童木最爱喵了 于 2014-5-27 22:08 编辑

[C#] 纯文本查看 复制代码
  //使用URLEncode是为了解决中文用户名或者密码的问题
        public static string URLDecode(string text)
        {
            return HttpUtility.UrlDecode(text, Encoding.GetEncoding("utf-8"));
        }
        public static string URLEncode(string text)
        {
            return HttpUtility.UrlEncode(text, Encoding.GetEncoding("utf-8"));
        }


第一次HTTP:提取formhash
[C#] 纯文本查看 复制代码
//第一次HTTP:提取formhash
            string formhash = "";
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = "http://www.gamemake.org/member.php?mod=logging&action=login",//URL     必需项 
                Encoding = System.Text.Encoding.GetEncoding("utf-8"),  
                Method = "Get",//URL     可选项 默认为Get    
                Cookie = "",//字符串Cookie     可选项     
                UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型
                ContentType = "text/html"//返回类型    可选项有默认值   
            };
            HttpResult result = http.GetHtml(item);
            //提取COOKIE
            string cookie = result.Cookie.Replace("path=/;", "");
            //提取formhash
            formhash = Regex.Match(result.Html, @"(?<=formhash=)\w+").Value;


第二次HTTP:获取COOKIE
[C#] 纯文本查看 复制代码
            //第二次HTTP:获取COOKIE
            item=new HttpItem()
            {
                URL = "http://www.gamemake.org/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=Ld7k8&inajax=1",//URL     必需项    
                Encoding = System.Text.Encoding.GetEncoding("utf-8"), 
                Method = "Post",//    可选项 默认为Get   
                Cookie = cookie,//字符串Cookie     直接用第一次GET到的cookie
                Referer = "http://www.gamemake.org/member.php?mod=logging&action=login",//来源URL     可选项   
                Postdata = "formhash=" + formhash + "&referer=http%3A%2F%2Fwww.gamemake.org%2F.%2F&loginfield=username&username=" + URLEncode(textBox1.Text.Trim()) + "&password=" + URLEncode(textBox2.Text.Trim()) + "&questionid=0&answer=",//Post数据        
                UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT6.0)",//用户的浏览器类型
                ContentType = "application/x-www-form-urlencoded"//返回类型    可选项有默认值   
            };
            result = http.GetHtml(item);            
            //提取COOKIE
            cookie = result.Cookie;//.Replace("path=/,", "").Replace("path=/;", "").Replace("path=/", "");


点击登录后的执行结果: 登录成功.png
说明登陆成功了,并存储此时的COOKIE。

第三次HTTP请求,点击按钮“验证”,使用的COOKIE是登录成功时返回的COOKIE,GET论坛主页,结果提示未登录的HTML。
此时捕获的COOKIE也是未登录时所返回的一般COOKIE。
失败.png
下面是代码
[C#] 纯文本查看 复制代码
            //第三次HTTP,用于验证
            item = new HttpItem()
            {
                URL = "http://www.gamemake.org",//URL     必需项    
                Encoding = System.Text.Encoding.GetEncoding("utf-8"),
                Referer = "http://www.gamemake.org/member.php?mod=logging&action=login",//来源URL    
                UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT6.0)",//用户的浏览器类型 
                ContentType = "application/x-www-form-urlencoded",//返回类型    可选项有默认值  
                Cookie = cookie//字符串Cookie  
            };

            result = http.GetHtml(item);
            //显示结果
            richTextBox1.Text = result.Cookie.Replace("path=/,", "").Replace("path=/;", "").Replace("path=/", "");





感谢你,愿意花时间读完我的疑问!



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2014-5-28 10:05:57 | 显示全部楼层
本帖最后由 阿童木最爱喵了 于 2014-5-28 10:25 编辑

寻找原因:
通过http://www.sufeinet.com/forum.php?mod=viewthread&tid=6976&ctid=22这个源码,达到了我的目的,获取的COOKIE是有用的。
随后和1L中的COOKIE进行了对比,找出了许多不同。
QQ截图20140528100438.png

看来1L中获取的COOKIE错误了
此外,1L中COOKIE还有许多的  expires=Fri, 27-Jun-2014 02:22:08 GMT(每个有效的字段后面都有1个); 我删除了再比较的时候。
发表于 2014-5-28 11:21:13 | 显示全部楼层
cookie  可能需要处理  你找下坛子里的 cookie处理类吧  应该有的。
 楼主| 发表于 2014-5-28 11:21:54 | 显示全部楼层
yyhapy 发表于 2014-5-28 11:21
cookie  可能需要处理  你找下坛子里的 cookie处理类吧  应该有的。

谢谢
 楼主| 发表于 2014-5-28 11:53:03 | 显示全部楼层
yyhapy 发表于 2014-5-28 11:21
cookie  可能需要处理  你找下坛子里的 cookie处理类吧  应该有的。

使用了COOKIE帮助类,发现获取的COOKIE和上图中的一样。看来获取的COOKIE就有误了
 楼主| 发表于 2014-5-29 00:03:26 | 显示全部楼层
没办法,我就用浏览器控件得了,然后隐藏这个浏览器控件,相关的操作函数:http://www.sufeinet.com/forum.ph ... tid=3941&ctid=5

发表于 2015-2-22 14:08:53 | 显示全部楼层
楼主分享下你的皮肤啦
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-5-23 12:48

© 2014-2021

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