2010-09-27 132 views
0

我在这里有一个实际的问题。 我必须访问一个网站并获取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中。它可以工作吗? 在此先感谢您的帮助。

回答

0

虽然创建支持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; 
+0

即使使用HttpWebRequest tecnique,我也尝试过,正如您从我的帖子中看到的那样,但没有任何结果。该网站没有发回任何cookie,或者它以我无法截取的方式发送。 – themarcuz 2010-09-28 08:38:39

+0

我忘了说...我甚至启用了Cookie,创建一个新的CookieContainer,正如你所建议的那样...同样的结果:没有检测到饼干:( – themarcuz 2010-09-28 08:48:34

+0

嗯,它适用于我...你尝试过与其他网站吗?返回2饼干 – 2010-09-28 09:16:29

0

该网站可检测到您使用的是未知的“浏览器”,并假设你不能接受Cookie,因此它甚至没有提供一个。答案是制作一个自定义的WebRequest,它看起来像来自IE 8而不是.NET WebClient。您应该可以通过为WebClient.Headers的User-Agent键设置一个值来完成此操作。

+0

试图遵循你的建议:我加入wr.UserAgent =“Mozilla/4.0(兼容; MSIE 8.0; Windows NT 6.0)“; 但没有任何变化... 我试过Chrome风格的用户代理事件,但结果相同:( – themarcuz 2010-09-28 08:39:04