HttpWebRequest: Agregar cookie a CookieContainer - > ArgumentException (Parametername: cookie.Dominio)


Estoy tratando de iniciar sesión en un sitio web a través de mi aplicación. Lo que hice:

Primero me di cuenta de cómo el navegador hace el proceso de autorización con Fiddler. Examiné cómo se construye la solicitud POST e intenté reconstruirla. El navegador envía 4 cookies (Google Analytics) y traté de configurarlas:

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

(acaba de reemplazar los datos de la cookie original con#)

Luego pasé por el código con el depurador y tan pronto como los primeros gaCookies.Agregar se ejecuta, el la aplicación se detiene con un

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

Me gustaría saber por qué sucede esto. El constructor de Cookie no requiere un dominio y no se donde puedo obtener este valor?

Sería genial si alguien de ustedes pudiera ayudarme con esto.
No soy un desarrollador web o un experto en cosas web, así que no sé mucho al respecto.
¿Hay tal vez una gran fuente donde pueda aprender sobre esto si no hay una "respuesta corta y rápida"?

Author: TorbenJ, 2013-09-07

1 answers

CookieContainers puede contener varias cookies para diferentes sitios web, por lo que se debe proporcionar una etiqueta (el Dominio) para vincular cada cookie a cada sitio web. El Dominio se puede configurar al instanciar las cookies individuales de la siguiente manera:

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

Una forma fácil de obtener el dominio es crear un Uri (si aún no está utilizando uno) que contenga su url de destino y establecer el dominio de la cookie utilizando la propiedad Uri.Host.

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

gaCookies.Add(new Cookie("__utmc", "#########") { Domain = target.Host });
 67
Author: Ichabod Clay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-06 23:54:01