HttpWebRequest:向CookieContainer添加Cookie - > ArgumentException(Parametername:cookie.Domain)

时间:2013-09-06 23:13:48

标签: c# cookies httpwebrequest webrequest

我正在尝试通过我的应用程序登录网站。 我做了什么:

首先,我弄清楚浏览器如何使用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的构造函数不需要域,我不知道在哪里可以得到这个值?

如果你们中的某个人可以帮助我,那将是非常好的 我不是网络开发人员或网络专家,所以我对此并不了解 如果没有“简短快速的回答”,我是否可以从中了解到这一点?

1 个答案:

答案 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 });