web-dev-qa-db-fra.com

HttpWebRequest: Ajouter un cookie à CookieContainer -> ArgumentException (Parametername: cookie.Domain)

J'essaie de me connecter à un site Web via mon application. Ce que j'ai fait:

J'ai d'abord compris comment le navigateur effectue le processus d'autorisation avec Fiddler. J'ai examiné comment la requête POST est construite et j'ai essayé de la reconstruire. Le navigateur envoie 4 cookies (Google Analytics) et j'ai essayé de les définir:

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

(vient de remplacer les données de cookie d'origine par #)

Ensuite, j'ai parcouru le code avec le débogueur et dès que le premier gaCookies.Add est exécuté, l'application s'arrête avec un

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

Je voudrais savoir pourquoi cela se produit. Le constructeur de Cookie ne nécessite pas de domaine et je ne sais pas où obtenir cette valeur?

Ce serait très bien si quelqu'un d'entre vous pouvait m'aider avec ça.
Je ne suis pas un développeur Web ou un expert des trucs Web, donc je ne sais pas grand-chose à ce sujet.
Y a-t-il peut-être une excellente source où je peux en savoir plus s'il n'y a pas de "réponse courte et rapide"?

44
TorbenJ

CookieContainers peuvent contenir plusieurs cookies pour différents sites Web, c'est pourquoi une étiquette (le domaine) doit être fournie pour lier chaque cookie à chaque site Web. Le domaine peut être défini lors de l'instanciation des cookies individuels comme suit:

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

Un moyen simple de saisir le domaine est de créer un Uri (si vous n'en utilisez pas déjà un) qui contient votre URL cible et de définir le domaine du cookie à l'aide du Uri.Host propriété.

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

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