我正在从事一个项目,该项目从Amazon.co.uk上的页面上抓取内容。我可以成功提交登录表单,并将Cookie存储在Cookie容器中,一切看起来都很正常,我成功登录了网站。但是,当我浏览到某些页面时,它显示为已注销,并再次提示登录屏幕。我永远无法以编程方式访问该页面。
我想我可能陷入了这里报告的错误,该错误与.NET 4上的子域Cookie容器有关:https://connect.microsoft.com/VisualStudio/feedback/details/771651/cookiecontainer-subdomain-handling-issue-in-net-4-0#
此链接上存在两个解决方案:
Workaround#1:在收到Version=1 cookie的响应后,将它们添加到新的CookieContainer中,作为>普通cookie,然后使用这个新容器进行后续请求。
解决方法#2:在收到父域的Version=1 cookie的响应后,将它们添加到相同的>CookieContainer再次出现,现在是子域。
我不确定我是否理解如何实现这一点,以前有没有人经历过这种情况,可以与我分享解决方案?我正在运行.NET 4.0。
谢谢,科林。
我发现解决方案是为每个请求重新创建CookieContainer,并将Version 1 Cookies修改为0:
CookieContainer newCookies = new CookieContainer();
newCookies.Add(new Uri("https://www.amazon.co.uk/"), new Cookie
{
Name = c.Name,
Version = 0,
Comment = c.Comment,
CommentUri = c.CommentUri,
Discard = c.Discard,
Domain = c.Domain,
Expired = c.Expired,
Expires = c.Expires,
HttpOnly = c.HttpOnly,
Path = c.Path,
Port = c.Port,
Secure = c.Secure,
Value = c.Value
});
MS似乎拒绝修复一个烦人的错误。希望这能帮助到别人!