苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 29032|回复: 11

[其他] C#的,用HttpWebRequest获取Cookie的问题

[复制链接]
发表于 2013-4-8 15:29:49 | 显示全部楼层 |阅读模式
请问我用以下这种方法为什么获取不到网页返回的Cookie呢?

            req = (HttpWebRequest)HttpWebRequest.Create(url);
            req.Method = "GET";
            CookieContainer cc = new CookieContainer();
            using (HttpWebResponse wr = (HttpWebResponse)req.GetResponse())
            {
                cc.Add(wr.Cookies);
                MessageBox.Show(cc.Count.ToString());
            }

或者说这种方式获取有错吗?


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-4-8 16:46:13 | 显示全部楼层
wr.Cookies一般是没有数据的,
你可以这样取Cookie

或者你可以这样写
string cookie= response.Headers["set-cookie"];
这样取的是字符串类型的。
 楼主| 发表于 2013-4-8 20:27:59 | 显示全部楼层
那我应该如何用GET提交时附上Cookie呢。?
飞哥你的类有点复杂额。。。看不太懂。。。
能不能给个简单点的方法指点一二。。谢谢了
发表于 2013-4-8 20:30:31 | 显示全部楼层
 楼主| 发表于 2013-4-8 20:35:23 | 显示全部楼层
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.ContentType = "application/x-www-form-urlencoded";
飞哥。。。如果这2句不写应该没什么事吧。?
发表于 2013-4-8 21:07:40 | 显示全部楼层
肯定有,ContentType 这个你百度一下看看具体解释吧,我的Httphelper类里面也有详细说明 ,你看这个肯定没有我的Httphelper类简单,只要看看教程就行了。
建议使用Httphelper类来访问
 楼主| 发表于 2013-4-11 11:11:58 | 显示全部楼层
谢谢飞哥了。。。弄得差不多了。。结下帖子。。谢谢了。
发表于 2013-4-11 11:16:01 | 显示全部楼层
bin8673853 发表于 2013-4-11 11:11
谢谢飞哥了。。。弄得差不多了。。结下帖子。。谢谢了。

帖子已结了,你下次再回复我时要单击下我下面的回复,你直接回复自己的帖子我有可能看不到。呵呵
发表于 2013-7-17 15:12:56 | 显示全部楼层
public static bool WebGetContext(string strUrl, ref CookieCollection cookiesCollection, ref string strContext, bool isAllowAutoRedirect, string strReferer)
        {
            try
            {
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(strUrl);
                req.Method = "GET";
                req.Headers.Add("Accept-Encoding", "gzip, deflate");
                req.UserAgent = _strHeadUserAgent;
                req.Accept = _strHeadAccept;
                req.AllowAutoRedirect = isAllowAutoRedirect;
                req.ReadWriteTimeout = nTimeOut;
                if (!string.IsNullOrEmpty(strReferer))
                    req.Referer = strReferer;
                req.CookieContainer = new CookieContainer();
                req.CookieContainer.Add(cookiesCollection);

                using(HttpWebResponse wr = (HttpWebResponse)req.GetResponse())
                {
                    //重定向获取cookies
                    cookiesCollection = req.CookieContainer.GetCookies(req.RequestUri);
                    if (CoverEncod(wr, ref strContext))
                        return true;
                }                  
                return false;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
        }

   public static bool CoverEncod(HttpWebResponse wr, ref string strContext)
        {
            try
            {
                //获取编码格式
                string encoding = "utf-8";
                Regex regex = new Regex(@"(?<=charset=).*");
                Match match = regex.Match(wr.ContentType);
                if (match.Success)
                    encoding = match.Value.ToString();

                //获取正文内容
                if (wr.Headers.ToString().Contains("gzip"))
                {
                    using (GZipStream gzipStream = new GZipStream(wr.GetResponseStream(), CompressionMode.Decompress))
                    {
                        using (StreamReader streamReader = new StreamReader(gzipStream, Encoding.GetEncoding(encoding)))
                            strContext = streamReader.ReadToEnd();
                    }
                }
                else
                {
                    using (StreamReader streamReader = new StreamReader(wr.GetResponseStream(), Encoding.GetEncoding(encoding)))
                        strContext = streamReader.ReadToEnd();
                }
                return true;
            }
            catch (System.Exception e)
            {
                Console.WriteLine(e.Message);
                return false;
            }
           
        }
发表于 2013-7-17 15:14:13 | 显示全部楼层
ddddddddddddd
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2025-1-10 21:47

© 2014-2021

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