我正在使用HttpWebRequest
和HttpWebResponse
抓取一个网站。我CookieContainer
对每个请求都使用相同的,以确保自动处理 cookie。
但是,其中一个请求需要特定的 cookie,该 cookie 在先前的响应中设置。虽然这存在于集合中,但其Path
属性似乎不正确。根据RFC2109(第 7 页),当 cookie 设置为空白路径(就像这个一样)时,路径应设置为请求的 URL,直到但不包括最后的斜杠。实际发生的情况是它被设置为整个URL 路径,这意味着 cookie 不能随后被同一子域中的不同 URL 读取。
一个例子:
- 我在http://www.myserver.com/sub/mypage.php请求页面
- 响应包含一个
Set-Cookie
标头,其内容为mycookie=12345; 到期=格林威治标准时间 2012 年 6 月 27 日星期三 16:20:00 - cookie 被添加到 .NET CookieCollection。由于没有设置路径,路径被错误地初始化为/sub/mypage.php
- 我请求同一子域下的另一个页面,但它需要 mycookie cookie,例如http://www.myserver.com/sub/anotherpage.php
- .NET 不提供 cookie,因为路径不完全匹配。如果路径是/sub,它将被正确地提供
我使用带有 Firebug 和 Firecookie 扩展的 Firefox 浏览器执行了相同的导航步骤。在实际浏览器会话中,路径设置正确,即子域。
任何人都可以确认这一点并可能指出我解决此问题的方法或解决方法吗?非常感谢。