实践挑战:从.net的本网站检索cookie
我在这里有一个实际的问题。 我必须访问一个网站并获取cookies信息以在随后的导航中重复使用它。我没有任何浏览器控件,因为一切都应该在服务器上运行。 有些网站的任务非常简单,但有一些网站以我无法截取的方式发回cookie。实践挑战:从.net的本网站检索cookie
示例是Italian highways site:我无法理解他们如何发回cookie,最重要的是,我如何从.Net应用程序捕获这些cookie。
我都试过WebClient的对象,寻找到头部,以这样的方式
var wc = new WebClient();
var htmlMainPage = wc.DownloadString(new Uri(AutostradeMainSite));
string cookies = wc.ResponseHeaders["Set-Cookie"];
,但我没有得到任何结果。 即使通过查看标题,那里也没有cookie。
然后我试着用HttpWebRequest对象,但我没能检索饼干:
HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(AutostradeMainSite);
wr.Method = "GET";
HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
var cookies = response.Cookies
我在做什么错?
使用IE或Chrome浏览器的一些开发工具分析网站的主页,我可以看到一些cookie被发送到浏览器,但我看不到它们既不在标题中,也不在javascript中。它可以工作吗? 在此先感谢您的帮助。
虽然创建支持cookie的派生版本非常简单,但WebClient
类无法处理开箱即用的cookies。你可以用HttpWebRequest
类做到这一点,但你需要设置CookieContainer
属性:
HttpWebRequest req = WebRequest.Create("http://www.google.com") as HttpWebRequest;
req.CookieContainer = new CookieContainer();
HttpWebResponse res = req.GetResponse() as HttpWebResponse;
CookieCollection cookies = res.Cookies;
该网站可检测到您使用的是未知的“浏览器”,并假设你不能接受Cookie,因此它甚至没有提供一个。答案是制作一个自定义的WebRequest,它看起来像来自IE 8而不是.NET WebClient。您应该可以通过为WebClient.Headers的User-Agent键设置一个值来完成此操作。
试图遵循你的建议:我加入wr.UserAgent =“Mozilla/4.0(兼容; MSIE 8.0; Windows NT 6.0)“; 但没有任何变化... 我试过Chrome风格的用户代理事件,但结果相同:( – themarcuz 2010-09-28 08:39:04
即使使用HttpWebRequest tecnique,我也尝试过,正如您从我的帖子中看到的那样,但没有任何结果。该网站没有发回任何cookie,或者它以我无法截取的方式发送。 – themarcuz 2010-09-28 08:38:39
我忘了说...我甚至启用了Cookie,创建一个新的CookieContainer,正如你所建议的那样...同样的结果:没有检测到饼干:( – themarcuz 2010-09-28 08:48:34
嗯,它适用于我...你尝试过与其他网站吗?返回2饼干 – 2010-09-28 09:16:29