时间:2010-09-27 17:48:58

标签: .net cookies httpwebrequest webclient

我在这里有一个实际的问题。 我必须访问某个站点并获取cookie信息,以便在后续导航中重复使用它。我没有任何浏览器控件,因为一切都应该在服务器上运行。 对于某个站点,任务非常简单,但有些站点以我无法拦截的方式发回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"];

但我没有得到任何结果。 即使通过查看标题,那里也没有饼干。

然后我尝试使用HttpWebRequest对象,但我无法检索到cookie:

HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(AutostradeMainSite);
wr.Method = "GET";
HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
var cookies = response.Cookies

我做错了什么?

使用一些用于IE或Chrome的开发者工具分析网站的主页,我可以看到一些cookie被发送到浏览器,但我既不能在标题中看到它们,也不能在javascript中看到它们...怎么能这行得通? 提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

WebClient类无法开箱即用地处理cookie,尽管创建支持cookie的派生版本非常容易。你可以使用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;

答案 1 :(得分:0)

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