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

Tor*_*enJ 45 c# cookies webrequest httpwebrequest

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

首先,我弄清楚浏览器如何使用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)"));
Run Code Online (Sandbox Code Playgroud)

(刚用#替换了原始的cookie数据)

然后我用调试器完成了代码,一旦第一个gaCookies.Add被执行,应用程序就停止了

System.ArgumentException: The parameter '{0}' cannot be an empty string. Parameter name: cookie.Domain
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样.Cookie的构造函数不需要域,我不知道在哪里可以得到这个值?

如果你们中的某个人可以帮助我,那将是非常好的.
我不是网络开发者或网络专家,所以我不太了解它.
如果没有"简短快速的答案",我是否可以从中获悉这一点?

Ich*_*lay 78

CookieContainers可以为不同的网站保存多个cookie,因此必须提供一个标签(域)来将每个cookie绑定到每个网站.在实例化各个cookie时可以设置域,如下所示:

Cookie chocolateChip = new Cookie("CookieName", "CookieValue") { Domain = "DomainName" };
Run Code Online (Sandbox Code Playgroud)

获取域名的一种简单方法Uri是使用包含目标URL 的(如果您还没有使用域名)并使用该Uri.Host属性设置cookie的域.

CookieContainer gaCookies = new CookieContainer();
Uri target = new Uri("http://www.google.com/");

gaCookies.Add(new Cookie("__utmc", "#########") { Domain = target.Host });
Run Code Online (Sandbox Code Playgroud)

  • 这个简单的类应该是自我记录而不必是堆栈溢出问题.至少微软已向正确的方向迈出了一步,并没有显示通用的"发生错误". (5认同)