HttpWebRequest:将 Cookie 添加到 CookieContainer -> ArgumentExcep

本文关键字:CookieContainer ArgumentExcep 添加 Cookie HttpWebRequest | 更新日期: 2023-09-27 18:30:38

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

首先,我想出了浏览器如何使用Fiddler进行授权过程。我检查了 POST 请求是如何构建的,并尝试重建它。浏览器发送 4 个 cookie(谷歌分析),我尝试设置它们:

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 的构造函数不需要域,我不知道在哪里可以获得此值?

如果你们中的某个人能帮我解决这个问题,那就太好了。
我不是网络开发人员或网络专家,所以我对此了解不多。
如果没有"简短而快速的答案",是否有一个很好的来源可以让我了解这一点?

HttpWebRequest:将 Cookie 添加到 CookieContainer -> ArgumentExcep

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

Cookie chocolateChip = new Cookie("CookieName", "CookieValue") { Domain = "DomainName" };
获取

域的一种简单方法是创建一个包含目标网址的Uri(如果您尚未使用),并使用 Uri.Host 属性设置 cookie 的域。

CookieContainer gaCookies = new CookieContainer();
Uri target = new Uri("http://www.google.com/");
gaCookies.Add(new Cookie("__utmc", "#########") { Domain = target.Host });