Comment ajouter des cookies pour WebRequest?
Je suis en train de test de l'unité un peu de code, et j'ai besoin de remplacer ceci:
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create( uri );
httpWebRequest.CookieContainer = new CookieContainer();
avec
WebRequest webRequest = WebRequest.Create( uri );
webRequest.CookieContainer = new CookieContainer();
Fondamentalement, comment puis-je obtenir des cookies dans la demande sans l'aide d'un HttpWebRequest?
- Ce serait difficile, car les cookies sont un HTTP concept. Est-il une raison pour laquelle vous avez besoin de faire ce changement?
- WebRequest permettra de créer un HttpWebRequest en fonction de l'uri. Donc, si je veux, à se moquer de ma propre objet WebRequest et/ou enregistrer mon propre uri qui renvoie également un WebRequest, alors je ne veux pas contraindre la méthode pour travailler uniquement avec un objet HttpWebRequest.
- Je comprends que le type à l'exécution de
webRequest
seraHttpWebRequest
. Mais l'accèsCookieContainer
exige que le type de compilation êtreHttpWebRequest
. Aussi, vous mentionnez pas contraignant-vous à HTTP, mais dans ce cas, les cookies ne signifie pas grand-chose, puisqu'ils sont un HTTP construire (ce qui est la raison de leur absence surWebRequest
en premier lieu.) - dlev - c'est pourquoi je suis à la recherche d'un moyen d'ajouter des cookies. Imaginez si je l'ai dit si ... alors addcookies ^^
- Regardez cette page. stackoverflow.com/questions/18667931/... il a été très utile pour moi
Vous devez vous connecter pour publier un commentaire.
En fonction de vos commentaires, vous pourriez envisager la rédaction d'un méthode d'extension:
Alors vous pouvez avoir un code comme:
webRequest.TryAddCookie(new Cookie("varName", "varValue","/", uri.Host));
.WebRequest est une classe abstraite qui n'ont pas de propriété CookieContainer. En outre, vous ne pouvez pas utiliser les en-Têtes de collection (pas de mise en œuvre de l'exception) de sorte que toute tentative comme webRequest.Les en-têtes.Add("Cookie", "...") échouera.
Désolé, mais vous n'avez aucune chance d'utiliser des cookies avec WebRequest.
Bâton sur HttpWebRequest et ajouter/modifier autant de cookies que vous aimez à l'aide de ses en-Têtes de collection!
Essayer avec quelque chose comme ceci:
Object reference not set to an...
. D'abord, nous pouvons avoir besoinrequest.CookieContainer = new CookieContainer();
puis d'appeler la méthode Add devrait fonctionner.dlev la réponse a fini par travailler, mais j'ai eu des problèmes de mise en œuvre de la solution ("Le paramètre" {0} " ne peut pas être une chaîne vide."), j'ai donc décidé d'écrire le code complet dans le cas où quelqu'un d'autre a des problèmes similaires.
Mon objectif était d'obtenir le code html comme une chaîne de caractères, mais j'ai besoin d'ajouter les biscuits à la demande web. C'est la fonction qui télécharge de la chaîne à l'aide de cookies:
Nous sommes l'aide du code de dlev réponse:
C'est la façon dont vous utilisez le code complet: