HttpWebRequest.CookieContainer与HttpWebResponse.Cookies的区别和联系
2012-08-25 09:45
525 查看
倒腾了老久,终于把这两者的关系给弄清出了。也不辜负我一个上午的时间~~~
关于 HttpWebRequest.CookieContainer与HttpWebResponse.Cookies的相关性质 MSDN和其他的博客上有很多,我就不再多说了,没有了解的自己去看看吧。
现在主要说说他们两个的区别。用过这两中属性的童鞋都发现,在大部分情况下它们两的内容是一模一样的,应为都是保存了和这次链接相关的Cookie,但是有一点不同:
HttpWebRequest.CookieContainer中包含的Cookie是与这次请求相关的所有Cookie,然而HttpWebResponse.Cookies却只包含这次请求中最后请求的URL相关的Cookie。
神马情况呢? 关键的是重定向,也就是说,当前如果访问的是Default1.aspx,并且Default1.aspx中会产生一个叫“Default1”的Cookie,并且会重定向到Default2.aspx页面。在Default2.aspx页面中同样会产生一个叫“Default2”的Cookie,并且会重定向到Default3.aspx页面。在Default3.aspx页面中会产生一个"Default3"的Cookie。到此为止整个请求就结束了。
此时HttpWebRequest.CookieContainer中包含了 3 个Cookie,分别为“Default1,Default2,Default3”,使用GetCookies方法
而此时HttpWebResponse.Cookies里面只包含了1个Cookie,那就是Default3。也就是最后一个页面所产生的Cookie。
这样,在自动提交表单来爬取,需要保持Session或者Cookie的页面时,需要将新产生的HttpWebResponse.Cookies中的Cookie保存起来,不能够直接的覆盖到以前的Cookie值了。并且要比对每次请求的HttpWebRequest.CookieContainer和HttpWebResponse.Cookies中的Cookie值,防止有遗漏,造成某些页面爬取不到。
PS:刚刚弄懂,可能有没有深入理解,还望高手拍砖O(∩_∩)O~
关于 HttpWebRequest.CookieContainer与HttpWebResponse.Cookies的相关性质 MSDN和其他的博客上有很多,我就不再多说了,没有了解的自己去看看吧。
现在主要说说他们两个的区别。用过这两中属性的童鞋都发现,在大部分情况下它们两的内容是一模一样的,应为都是保存了和这次链接相关的Cookie,但是有一点不同:
HttpWebRequest.CookieContainer中包含的Cookie是与这次请求相关的所有Cookie,然而HttpWebResponse.Cookies却只包含这次请求中最后请求的URL相关的Cookie。
神马情况呢? 关键的是重定向,也就是说,当前如果访问的是Default1.aspx,并且Default1.aspx中会产生一个叫“Default1”的Cookie,并且会重定向到Default2.aspx页面。在Default2.aspx页面中同样会产生一个叫“Default2”的Cookie,并且会重定向到Default3.aspx页面。在Default3.aspx页面中会产生一个"Default3"的Cookie。到此为止整个请求就结束了。
此时HttpWebRequest.CookieContainer中包含了 3 个Cookie,分别为“Default1,Default2,Default3”,使用GetCookies方法
而此时HttpWebResponse.Cookies里面只包含了1个Cookie,那就是Default3。也就是最后一个页面所产生的Cookie。
这样,在自动提交表单来爬取,需要保持Session或者Cookie的页面时,需要将新产生的HttpWebResponse.Cookies中的Cookie保存起来,不能够直接的覆盖到以前的Cookie值了。并且要比对每次请求的HttpWebRequest.CookieContainer和HttpWebResponse.Cookies中的Cookie值,防止有遗漏,造成某些页面爬取不到。
PS:刚刚弄懂,可能有没有深入理解,还望高手拍砖O(∩_∩)O~
相关文章推荐
- HttpWebRequest.CookieContainer与HttpWebResponse.Cookies的区别和联系
- HttpWebRequest.CookieContainer与HttpWebResponse.Cookies的区别和联系
- 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录
- 利用HttpWebRequest和HttpWebResponse获取Cookie
- DotNet Compact Framework 中使用HttpWebRequest和HttpWebResponse时使用Cookie
- HttpWebRequest、HttpWebResponse保存Cookie
- 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录
- HttpWebRequest..::.CookieContainer 属性
- 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录
- 简述HttpResponse.SetCookie、HttpResponse.AppendCookie、HttpResponse.Cookies.Add三者的区别
- c#2.0中的HttpWebRequest涉及到的CookieContainer有点问题
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- WebView 保存HttpResponse 中的Cookie
- 黄聪:C#模拟网站页面POST数据提交表单(二)--HttpWebRequest以及HttpWebResponse (转)
- HttpWebResponse与WebResponse的区别
- httpWebRequest和webRequest的区别
- 用socket代替httpwebrequest/httpwebresponse的研究
- post xml using HttpWebRequest/Response
- HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法
- C#,WebRequest类、HttpWebRequest类与HttpRequest类的区别