HttpWebRequest.CookieContainer与HttpWebResponse.Cookies的区别和联系
倒腾了老久,终于把这两者的关系给弄清出了。也不辜负我一个上午的时间~~~
关于 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~
posted on 2012-08-25 09:45 Jason_liu 阅读(2168) 评论(0) 编辑 收藏 举报