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

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 19052|回复: 12

[HttpHelper] 登陆豆瓣网遇到的问题

[复制链接]
发表于 2014-5-15 16:44:51 | 显示全部楼层 |阅读模式
1金钱
今天真郁闷,最近在做 豆瓣网的 http  。
目前可以确定是登陆上去了。
然后我在这个基础上访问其他页面的时候被提示,需要先登陆。
我第一次登陆的时候 返回的页面 上面 有我的账号信息。
因此 应该可以确定为登陆成功了。

            //保存登陆状态的Cookie
            CookieContainer OkCookie = new CookieContainer();
            OkCookie.Add(HttpWResp.Cookies);


这一步就把COOKIE保存下来了。

然后我第二次访问其他页面的时候COOKIE是这样传递的。
HttpWReq.CookieContainer = OkCookie;

请问前辈们有没有看出什么问题啊



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-5-15 16:49:27 | 显示全部楼层
为什么不用我的Htttphelper呢。这个要看具体代码的,
回复

使用道具 举报

 楼主| 发表于 2014-5-15 16:51:36 | 显示全部楼层
站长苏飞 发表于 2014-5-15 16:49
为什么不用我的Htttphelper呢。这个要看具体代码的,

高手,一言难进啊 我觉得用这种方法 就能清楚的知道每个流程  对自己的提升很有帮助。
   对于这次出现的问题 有什么经验可以讲解一下的吗
回复

使用道具 举报

发表于 2014-5-15 17:07:38 | 显示全部楼层
看不到代码不清楚。获取是cookie格式的问题。
回复

使用道具 举报

 楼主| 发表于 2014-5-15 17:09:13 | 显示全部楼层
站长苏飞 发表于 2014-5-15 17:07
看不到代码不清楚。获取是cookie格式的问题。

你要什么代码 我这边都有
                //Gzip解压缩
                Stream st = HttpWResp.GetResponseStream();
                if (HttpWResp.ContentEncoding.ToLower().Contains("gzip"))
                {
                    st = new GZipStream(st, CompressionMode.Decompress);
                }
                StreamReader sr = new StreamReader(st, Encoding.UTF8);
                string s = sr.ReadToEnd();
这个是Gzip解压缩的代码
回复

使用道具 举报

 楼主| 发表于 2014-5-15 17:10:19 | 显示全部楼层
站长苏飞 发表于 2014-5-15 17:07
看不到代码不清楚。获取是cookie格式的问题。

这个网站采用的是UTF-8的编码   那COOKIE 应该怎么优化呢 高手。
回复

使用道具 举报

 楼主| 发表于 2014-5-15 17:13:17 | 显示全部楼层
站长苏飞 发表于 2014-5-15 17:07
看不到代码不清楚。获取是cookie格式的问题。

豆瓣网的数据在发送给你之前都是经过gzip压缩过的 然后你得到的数据是压缩的数据 要看到 真正的数据是要先解压缩的。
回复

使用道具 举报

 楼主| 发表于 2014-5-15 17:15:08 | 显示全部楼层
站长苏飞 发表于 2014-5-15 17:07
看不到代码不清楚。获取是cookie格式的问题。

高手,在线等你的消息呢
回复

使用道具 举报

 楼主| 发表于 2014-5-15 17:24:04 | 显示全部楼层
站长苏飞 发表于 2014-5-15 17:07
看不到代码不清楚。获取是cookie格式的问题。

        string func_url(string str)
        {
            byte[] buffer = Encoding.GetEncoding("UTF-8").GetBytes(str);
            String str1 = null;
            String str2 = null;
            for (int n = 0; n < buffer.Length; n++)
            {
                str1 = String.Format("%{0:x}", buffer[n]);
                str2 = str2 + str1;
            }
            return str2;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            CookieContainer cookie = PostData_douban("http://www.douban.com/accounts/login");
            HttpWebRequest HttpWReq = (HttpWebRequest)WebRequest.Create("http://www.douban.com/note/create");

            string title = func_url("上海治疗痔疮要多少钱");
            string body = func_url("上海治疗痔疮要多少钱,然后我在这个基础上访问其他页面的时候被提示,需要先登陆.");
           

            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] b = encoding.GetBytes(title + body);

            HttpWReq.CookieContainer = cookie;
            HttpWReq.Host = "www.douban.com";
            HttpWReq.Method = "POST";
            
            HttpWReq.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)";
            HttpWReq.ContentType = "application/x-www-form-urlencoded";
            HttpWReq.Accept = "text/html, application/xhtml+xml, */*";
            HttpWReq.Headers.Add("Accept-Encoding", "gzip, deflate");
            HttpWReq.Headers.Add("DNT", "1");
            HttpWReq.ContentLength = b.Length;

            //写入数据
            Stream stream = HttpWReq.GetRequestStream();
            stream.Write(b, 0, b.Length);
            stream.Close();

            //发送并接收响应
            HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();
            if (HttpWResp.StatusDescription == "OK")
            {
                //StreamReader reader = new StreamReader(HttpWResp.GetResponseStream(), Encoding.Default);
                //string str = reader.ReadToEnd();

                //Gzip解压缩
                Stream st = HttpWResp.GetResponseStream();
                if (HttpWResp.ContentEncoding.ToLower().Contains("gzip"))
                {
                    st = new GZipStream(st, CompressionMode.Decompress);
                }
                StreamReader sr = new StreamReader(st, Encoding.UTF8);
                string s = sr.ReadToEnd();

                textBox5.Text = s;
            }
            HttpWResp.Close();
            HttpWReq.Abort();
        }

这次所有的代码都在这里了。
回复

使用道具 举报

发表于 2014-5-15 17:27:01 | 显示全部楼层
使用字符串Cookie然后把Cooie后面的Path都删除了,格式化一下,应该就行了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 09:10

© 2014-2021

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