我正在尝试通过我的应用程序登录网站。 我做了什么:
首先,我弄清楚浏览器如何使用Fiddler执行授权过程。 我检查了如何构建POST请求,并尝试重建它。 浏览器发送4个Cookie(Google Analytics),我尝试设置它们:
CookieContainer gaCookies = new CookieContainer();
gaCookies.Add(new Cookie("__utma", "#########.###########.##########.##########.##########.#"));
gaCookies.Add(new Cookie("__utmb", "#########.#.##.##########"));
gaCookies.Add(new Cookie("__utmc", "#########"));
gaCookies.Add(new Cookie("__utmz", "#########.##########.#.#.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"));
(刚用#替换了原始的cookie数据)
然后我使用调试器完成了代码,并且一旦执行了第一个gaCookies.Add,应用程序就停止了
System.ArgumentException: The parameter '{0}' cannot be an empty string. Parameter name: cookie.Domain
我想知道为什么会这样。 Cookie的构造函数不需要域,我不知道在哪里可以得到这个值?
如果你们中的某个人可以帮助我,那将是非常好的 我不是网络开发人员或网络专家,所以我对此并不了解 如果没有“简短快速的回答”,我是否可以从中了解到这一点?
答案 0 :(得分:77)
CookieContainer
可以为不同的网站保存多个cookie,因此必须提供一个标签(域)来将每个cookie绑定到每个网站。在实例化各个cookie时可以设置域,如下所示:
Cookie chocolateChip = new Cookie("CookieName", "CookieValue") { Domain = "DomainName" };
获取域名的一种简单方法是制作包含目标网址的Uri
(如果您尚未使用),并使用Uri.Host
属性设置Cookie的域名。< / p>
CookieContainer gaCookies = new CookieContainer();
Uri target = new Uri("http://www.google.com/");
gaCookies.Add(new Cookie("__utmc", "#########") { Domain = target.Host });