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来获取淘宝数据的方法。
864 0
用Requests+Cookie,轻松获取淘宝商品数据!
|
Web App开发 JavaScript API
使用ES6的fetch API读取数据时要注意的一个和cookie相关的坑
使用ES6的fetch API读取数据时要注意的一个和cookie相关的坑
使用ES6的fetch API读取数据时要注意的一个和cookie相关的坑
|
数据可视化 搜索推荐
使用cookie实现大屏数据“千人千面”
DataV页面嵌入自己的业务系统后,如果实现不同用户登录看到不同的数据?“由服务器发起请求(HTTP 代理)”和“需要 cookie (不选择代理并且需要获取cookie时使用)”,这两个选项是做什么用的呢?用户又该如何配置?
14151 0
|
Web App开发 安全 数据安全/隐私保护
|
存储 安全 数据安全/隐私保护
cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中(转)
  基本概念:cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中。   以博客园为例,我们看看cookie有哪些属性:   1、Name:cookie的名称;   2、Value:cookie名称对应的值;   3、Domain:设置cookie作用域。
1062 0
|
算法 安全 .NET
【转】用ASP.NET加密Cookie数据
来源:http://www.cnblogs.com/taizhouxiaoba/archive/2009/02/05/1384772.html Cookie中的数据以文本的形式存在客户端计算机,考虑它的安全性,最好在将数据存入Cookie之前对其进行加密。
805 0
|
1月前
|
存储 自然语言处理 API
Session、cookie、token有什么区别?
Session、cookie、token有什么区别?
24 1