HttpWebResponse.Les Cookies vide malgré-Tête Set-Cookie (pas de redirection)
J'ai du mal à comprendre quel est le problème ici. Je suis l'envoi des informations de connexion, je peux voir la Set-Cookie dans l'en-Tête avec la valeur correcte, mais la collection de Cookies n'est pas exécuté.
C'est HTTPS, la connexion automatique des redirections, mais j'ai désactivé avec AllowAutoRedirect=false pour essayer de résoudre ce problème.
Dans cette capture d'écran, vous pouvez facilement voir les informations de débogage et que le cookie doit être configuré. Je suis en train de ma httpWebRequest.Cookie pour une nouvelle CookieCollection.
HttpWebRequest httpRequest;
CookieContainer reqCookies = new CookieContainer();
string url = "https://example.com";
string[] email = user.Split('@');
email[0] = System.Web.HttpUtility.UrlEncode(email[0]);
user = email[0] + "@" + email[1];
pass = System.Web.HttpUtility.UrlEncode(pass);
string postData = "email=" + user + "&password=" + pass;
byte[] byteData = Encoding.UTF8.GetBytes(postData);
httpRequest = (HttpWebRequest)WebRequest.Create(url);
httpRequest.Method = "POST";
httpRequest.Referer = url;
httpRequest.CookieContainer = reqCookies;
httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1003.1 Safari/535.19";
httpRequest.Accept = "text/html, application/xhtml+xml, */*";
httpRequest.ContentType = "application/x-www-form-urlencoded";
httpRequest.ContentLength = byteData.Length;
using (Stream postStream = httpRequest.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
postStream.Close();
}
httpRequest.AllowAutoRedirect = false;
HttpWebResponse b = (HttpWebResponse)httpRequest.GetResponse();
Essayé exactement le même code de connexion à http://www.yahoo.com et les cookies sont mis dans ma collection... Argh...
Voici la Set-Cookie valeur d'en-Tête:
s=541E2101-B768-45C8-B814-34A00525E50F; Domain=example.com; Path=/;
Version=1
- Vous assurer que vous avez la bonne nom de domaine du serveur? est-il domain.com ou .domain.com , ils sont tous les deux différents. Vous pouvez poster votre ASP.NET votre code?
Vous devez vous connecter pour publier un commentaire.
J'ai constaté que cette question ainsi, lors de la lecture de Cookies en C# qui ont été créés par un C# ASP.NET app... 😉
Ne sais pas si cela a à voir avec ça, mais j'ai trouvé que les deux Témoins qui sont définies dans mon cas sont écrits en un seul-tête Set-Cookie, avec le témoin de charge utile séparés par des virgules. J'ai donc adapté AppDeveloper de la solution à traiter avec ce plusieurs-problème de cookie, ainsi que la fixation du nom/valeur de la chose je l'ai mentionné dans les commentaires.
expires
en-têteWed, 04-Apr-18
Il semble que
Set-Cookie
en-tête envoyé par le site web est mal formé (Pas dans le format classique, il doit avoir été).Dans de tels cas, vous devez Analyser cookie manuellement et à l'
CookieContainer
.Set-Cookie
en-tête n'est pas dans le format exact que CookieParser est construit avec!reqCookies.Add
ligne toutefois, vous n'êtes pas d'ajouter le nom du Cookie, mais la tête de nom, qui est "Set-Cookie" je crois ce que vous voulez écrire, il esthttpResponse.Cookies.Add(new Cookie(match.Groups[1].ToString(), match.Groups[2].ToString(), "/", host));
Utiliser un
CookieContainer
comme dans cette réponse.Ce qui s'est déclenché ces regex approches pour moi a été une virgule dans
expires=Tue, ...
.À la recherche sur d'autres réponses j'ai amélioré incorrecte la gestion des cookies. À la différence de réponse à ce on gère automatiquement tous les cookies propriétés (comme expiré, sécurisé, etc.) et fonctionne avec toute la gamme des cookies (même quand il y a plus de 1 incorrect cookie).
Il est implémenté comme une extension de la méthode et peut être utilisé de la manière suivante:
FixCookies()
méthode d'extension:La bonne façon de le faire est de fixer la
CookieContainer
membre avant l'extraction de la réponse:Vous n'avez pas besoin d'analyser manuellement
SetCookie
.Qui pourrait être un peu tard, mais vous pouvez utiliser la fonction SetCookies
set-cookie
contientpath=/
Je sais que cette question est vieux, mais je suis tombé sur un code qui traite un "Set-Cookie" en-tête. Il gère les cookies séparés par des virgules et en extrait le nom, la date de péremption, le chemin, la valeur, et de domaine de chaque biscuit.
Ce code fonctionne mieux que Microsoft est propre cookie analyseur et c'est vraiment ce que l'officiel cookie analyseur doit être en train de faire. Je n'ai pas la moindre idée pourquoi Microsoft n'a pas fixé encore puisque c'est un problème très commun.
Voici le code d'origine:
http://snipplr.com/view/4427/
Je poste ici au cas où le lien est rompu à un certain point: