webentwicklung-frage-antwort-db.com.de

HttpWebRequest: Cookie zu CookieContainer hinzufügen -> ArgumentException (Parametername: cookie.Domain)

Ich versuche, mich über meine Anwendung auf einer Website anzumelden. Was ich getan habe:

Zuerst habe ich herausgefunden, wie der Browser den Autorisierungsprozess mit Fiddler durchführt. Ich habe untersucht, wie die POST Anfrage aufgebaut ist und habe versucht, sie zu rekonstruieren. Der Browser sendet 4 Cookies (Google Analytics) und ich habe versucht, sie zu setzen:

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)"));

(Die ursprünglichen Cookie-Daten wurden durch # ersetzt.)

Dann habe ich den Code mit dem Debugger durchgearbeitet und sobald die ersten gaCookies.Add ausgeführt werden, stoppt die Anwendung mit einem

System.ArgumentException: The parameter '{0}' cannot be an empty string. Parameter name: cookie.Domain

Ich würde gerne wissen, warum das passiert. Der Konstruktor von Cookie benötigt keine Domain und ich weiß nicht, wo ich diesen Wert bekommen kann?

Wäre sehr toll, wenn mir jemand von euch dabei helfen könnte.
Ich bin kein Webentwickler oder Experte in Sachen Web, daher weiß ich nicht viel darüber.
Gibt es vielleicht eine großartige Quelle, wo ich etwas darüber erfahren kann, wenn es keine "kurze und schnelle Antwort" gibt?

44
TorbenJ

CookieContainers kann mehrere Cookies für verschiedene Websites speichern, daher muss ein Label (die Domain) bereitgestellt werden, um jedes Cookie an jede Website zu binden. Die Domain kann beim Instanziieren der einzelnen Cookies wie folgt eingestellt werden:

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

Eine einfache Möglichkeit, die Domain zu finden, besteht darin, ein Uri zu erstellen (falls Sie noch keines verwenden), das Ihre Ziel-URL enthält, und die Domain des Cookies mit dem Uri.Host Eigentum.

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

gaCookies.Add(new Cookie("__utmc", "#########") { Domain = target.Host });
78
Ichabod Clay