C# webrequest 抓取数据时,多个域Cookie的问题

简介:

最近研究了下如何抓取为知笔记的内容,在抓取笔记里的图片内容时,老是提示403错误,用Chorme的开发者工具看了下:


这里的Cookie来自两个域,估计为知那边是验证了token(登录后才能获取到token)

下载图片的代码:

                var path = "https://note.wiz.cn/" + str.TrimStart('/');
                var extension = Path.GetExtension(path);
                var filepath = AppPath.Combine("Images/" + DateTime.Now.Ticks + extension);

                const string userAgent ="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36";
                const string accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                const string acceptLanguage = "zh-CN,zh;q=0.8";
                const string acceptEncoding = "gzip,deflate,sdch";
                var cookieContainer = new CookieContainer();
                var cookie = new Cookie
                {
                    Name = "token".Trim(),
                    Value = Token,
                    Domain = ".wiz.cn".Trim() //设置cookie域
                };
                cookieContainer.Add(cookie);
                string[] cookiesArr = txtCookie.Text.Split(';');
                foreach (string s in cookiesArr)
                {
                    string[] keyValuePair = s.Split('=');
                    if (keyValuePair.Length > 1)
                    {
                        cookie = new Cookie
                                       {
                                           Name = keyValuePair[0].Trim(),
                                           Value = keyValuePair[1].Trim(),
                                           Domain = "note.wiz.cn" //设置cookie域
                                       };
                        cookieContainer.Add(cookie);
                    }
                }

                var newUri = new Uri(path);
                var webRequest = (HttpWebRequest)WebRequest.Create(newUri);
                webRequest.Timeout = 20000;
                //webRequest.CookieContainer = cookieContainer;
                webRequest.UserAgent = userAgent;
                webRequest.Accept = accept;
                webRequest.Headers["Accept-Language"] = acceptLanguage;
                webRequest.Headers["Accept-Charset"] = acceptEncoding;
                webRequest.Headers["Accept-Encoding"] = acceptEncoding;
                webRequest.KeepAlive = true;
                webRequest.Headers["Cache-Control"] = "no-cache";
                webRequest.Headers["Upgrade-Insecure-Requests"] = "1";
                webRequest.Headers["Pragma"] = "no-cache";
                webRequest.Headers["Cookie"] = "token=" + Token + ";" + txtCookie.Text.Trim();//todo: Cookie 要这样赋值,不能用CookieContainer??

                webRequest.Referer = newUri.AbsoluteUri;
                HttpWebResponse rsp = (HttpWebResponse)webRequest.GetResponse();

                Stream stream = null;
                stream = rsp.GetResponseStream();
                Image.FromStream(stream).Save(filepath);

                // 释放资源
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
奇怪的是:用 webRequest.CookieContainer = cookieContainer; 来跟cookie赋值,token参数总是赋不上,

后面改为:webRequest.Headers["Cookie"] = "token=" + Token + ";" + txtCookie.Text.Trim(); 就可以了,

CookieContainer 不是支持多个域的cookie吗,难到跨域Cookie只能webRequest.Headers["Cookie"]这样赋值吗? 没弄明白,有知道的童鞋不吝赐教。



目录
相关文章
|
存储 数据采集 前端开发
用Requests+Cookie,轻松获取淘宝商品数据!
大家好,我是志斌! 最近身边一直有朋友说用Selenium无法爬取淘宝的商品数据了,问问有没有其他的爬取方式,来获取淘宝的商品数据。方法当然有了,下面我就给大家介绍一个Requests+Cookie来获取淘宝数据的方法。
1049 0
用Requests+Cookie,轻松获取淘宝商品数据!
|
6月前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
85 2
|
3月前
|
数据采集 JavaScript 前端开发
同花顺股票数据逆向:Cookie加密和Hook注入
同花顺股票数据逆向:Cookie加密和Hook注入
204 0
|
6月前
|
前端开发 Java API
饼干探秘:深入Spring MVC中获取Cookie数据的技术解析
饼干探秘:深入Spring MVC中获取Cookie数据的技术解析
69 3
|
6月前
|
安全 C#
C#Webrequest类的使用
C#Webrequest类的使用
38 0
|
6月前
客户端禁用cookie后的会话数据保存问题
客户端禁用cookie后的会话数据保存问题
|
存储 缓存 前端开发
Cookie实现数据共享
Cookie实现数据共享
145 0
Cookie实现数据共享
【C#】【Cookie】Cookie设置与读取
【C#】【Cookie】Cookie设置与读取
272 0
Java Web——Servlet的数据共享方案:Cookie类
Java Web——Servlet的数据共享方案:Cookie类
Java Web——Servlet的数据共享方案:Cookie类