Question

Je suis sûr que je dois faire quelque chose de mal. Mais je ne peux pas comprendre ce qui se passe pendant toute ma vie.

J'ai un problème où il semble que la classe HttpWebRequest du framework n’analyse pas correctement les cookies d’une réponse Web.

J'utilise Fiddler pour voir ce qui se passe et après avoir fait une demande, les en-têtes de la réponse ont l'apparence suivante:

HTTP/1.1 200 Ok
Connection: close
Date: Wed, 14 Jan 2009 18:20:31 GMT
Server: Microsoft-IIS/6.0
P3P: policyref="/w3c/p3p.xml", CP="CAO DSP IND COR ADM CONo CUR CUSi DEV PSA PSD DELi OUR COM NAV PHY ONL PUR UNI"
Set-Cookie: user=v.5,0,EX01E508801E$97$2E401000t$1BV6$A1$EC$104$A1$EC$104$A1$EC$104$21O001000$1E31!90$7CP$AE$3F$F3$D8$19o$BC$1Cd$23; Domain=.thedomain.com; path=/
Set-Cookie: minfo=v.4,EX019ECD28D6k$A3$CA
foreach(string cookie in response.Headers.GetValues("Set-Cookie"))
{
    Console.WriteLine("Cookie found: " + cookie);
}
C$CE$A2$D6$AD$D4!2$8A$EF$E8n$91$96$E1$D7$C8
Cookie found: user=v.5
Cookie found: 0
Cookie found: EX01E508801E$97$2E401000t$1BV6$A1$EC$104$A1$EC$104$A1$EC$104$21O00
1000$1E31!90$7CP$AE$3F$F3$D8$19o$BC$1Cd$23; Domain=.thedomain.com; path=/
Cookie found: minfo=v.4
Cookie found: EX019ECD28D6k$A3$CA<*>C$CE$A2$D6$AD$D4!2$8A$EF$E8n$91$96$E1$D7$C8<*>
F$98$AA$ED$DC$40V$AB$9C$C1$9CF$C9$C1zIF$3A$93$C6$A7$DF$A1$7E$A7$A1$A8$BD$A6$94c$
D5$E8$2F$F4$AF$A2$DF$80$89$BA$BBd$F6$2C$B6$A8; expires=Sunday
Cookie found: 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/
Cookie found: accttype=v.2
Cookie found: 3
Cookie found: 1
Cookie found: EX017E651B09k$A3$CA<*>C$DB$A2$CB$AD$D9$8A$8C$EF$E8t$91$90$E1$DC$C89
$98$AA$E0$DC$40O$A8$A4$C1$9C; expires=Sunday
Cookie found: 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/
Cookie found: tpid=v.1
Cookie found: 20001; expires=Sunday
Cookie found: 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/
Cookie found: MC1=GUID=541977e04a341a2a4f4cdaaf49615487; expires=Sunday
Cookie found: 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/
Cookie found: linfo=v.4
Cookie found: EQC|0|0|255|1|0||||||||0|0|0||0|0|0|-1|-1; expires=Sunday
Cookie found: 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/
Cookie found: group=v.1
Cookie found: 0; expires=Sunday
Cookie found: 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/
F$98$AA$ED$DC$40V$AB$9C$C1$9CF$C9$C1zIF$3A$93$C6$A7$DF$A1$7E$A7$A1$A8$BD$A6$94c$D5$E8$2F$F4$AF$A2$DF$80$89$BA$BBd$F6$2C$B6$A8; expires=Sunday, 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/ Set-Cookie: accttype=v.2,3,1,EX017E651B09k$A3$CA<*>C$DB$A2$CB$AD$D9$8A$8C$EF$E8t$91$90$E1$DC$C89$98$AA$E0$DC$40O$A8$A4$C1$9C; expires=Sunday, 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/ Set-Cookie: tpid=v.1,20001; expires=Sunday, 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/ Set-Cookie: MC1=GUID=541977e04a341a2a4f4cdaaf49615487; expires=Sunday, 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/ Set-Cookie: linfo=v.4,EQC|0|0|255|1|0||||||||0|0|0||0|0|0|-1|-1; expires=Sunday, 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/ Set-Cookie: group=v.1,0; expires=Sunday, 31-Dec-2014 23:59:59 GMT; Domain=.thedomain.com; path=/ Content-Type: text/html

Mais quand je regarde la réponse.Les cookies, je vois beaucoup plus de cookies que je m'attendais, avec les valeurs de différents cookies divisés en différents cookies.

Obtenir manuellement les en-têtes semble avoir pour résultat plus de méchanceté

Exemple: le code

<*>

produit le résultat:

<*>

comme vous pouvez le constater - le premier cookie de la liste des réponses brutes:

  1. Set-Cookie: utilisateur = v.5,0, EX01E508801

est en train de se scinder en:

  1. Cookie trouvé: utilisateur = v.5
  2. Cookie trouvé: 0
  3. Cookie trouvé: EX01E508801E $ ..........

Alors, que se passe-t-il ici?

  • Je me trompe?
  • La classe HttpWebRequest analyse-t-elle correctement les en-têtes http?
  • Le serveur Web sur lequel il crache les requêtes génère-t-il des en-têtes HTTP non valides?
Était-ce utile?

La solution

Les valeurs dans les cookies sont à éviter - vous devrez peut-être les encoder différemment.

La spécification de NetScape originale pour les cookies était un peu vague sur ce problème , déclarant

  

NOM = VALEUR:       Cette chaîne est une séquence de caractères excluant le point-virgule, la virgule   et espace blanc. S'il y a un besoin de   placer ces données dans le nom ou la valeur,   certaines méthodes de codage telles que le style d'URL   Le codage% XX est recommandé, bien qu'aucun   l'encodage est défini ou requis.

recommandé, mais pas obligatoire !

Autres conseils

Il semble que le serveur envoie des valeurs de cookie incorrectes. Les virgules IMHO ne sont pas autorisées dans les valeurs de cookie. Ils doivent être codés avec% 2C.

vous voudrez peut-être utiliser la surcharge entière de GetValues ??(i); vous ne devriez récupérer que 7 chaînes alors

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top