实际挑战:在.Net中从此站点检索cookie

实际挑战:在.Net中从此站点检索cookie,.net,cookies,httpwebrequest,webclient,.net,Cookies,Httpwebrequest,Webclient,我这里有一个实际问题。 我必须访问一个站点并获取cookies信息,以便在后续导航中重用它。我没有任何浏览器控件,因为一切都应该在服务器上运行。 对于某些站点来说,任务相当简单,但有些站点以我无法拦截的方式发回cookie 例如:我不明白他们是如何发回cookies的,最重要的是,我如何从.Net应用程序中捕获这些cookies 我尝试了两种WebClient对象,通过以下方式查看标题: var wc = new WebClient(); var htmlMainPage = wc.Downlo

我这里有一个实际问题。 我必须访问一个站点并获取cookies信息,以便在后续导航中重用它。我没有任何浏览器控件,因为一切都应该在服务器上运行。 对于某些站点来说,任务相当简单,但有些站点以我无法拦截的方式发回cookie

例如:我不明白他们是如何发回cookies的,最重要的是,我如何从.Net应用程序中捕获这些cookies

我尝试了两种WebClient对象,通过以下方式查看标题:

var wc = new WebClient();
var htmlMainPage = wc.DownloadString(new Uri(AutostradeMainSite));
string cookies = wc.ResponseHeaders["Set-Cookie"];
但我没有得到任何结果。 即使通过查看标题,也没有cookies

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

HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(AutostradeMainSite);
wr.Method = "GET";
HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
var cookies = response.Cookies
我做错了什么

使用IE或Chrome的开发工具分析网站主页,我可以看到一些cookie被发送到浏览器,但我在标题和javascript中都看不到它们。。。它是如何工作的? 提前感谢您的帮助。

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;

该网站可能检测到您正在使用未知浏览器,并假设您无法接受cookies,因此它甚至不提供cookies。答案是设计一个定制的WebRequest,看起来它来自IE8而不是.NETWebClient。您应该可以通过为WebClient.Headers的用户代理键设置一个值来实现这一点。

正如您在我的帖子中看到的,我甚至尝试了HttpWebRequest技术,但没有任何结果。该网站没有发回任何cookies,或者以我无法截获的方式发回。我忘了说。。。我甚至按照你的建议启用了cookies创建一个新的CookieContainer。。。相同的结果:没有检测到cookies:好吧,它对我有效。。。你尝试过其他网站吗?对我来说,谷歌返回2个Cookies我同意。。。谷歌的网站运行得相当好。问题出在网站www.autostrade.it上,我刚和Fiddler联系过,因为主页本身没有返回任何cookie。它包括一个位于/autostrade/service.do?sid=0的javascript文件,正是该请求返回了cookie;msie8.0;windowsnt6.0;但一切都没有改变。。。我尝试了使用Chrome样式的用户代理的事件,但结果相同: