2009-01-14 11 views
1

Je suis sûr que je dois faire quelque chose de mal. Mais ne peut pas pour la vie de moi comprendre ce qui se passe.HttpWebRequest Bizarre de cookie

J'ai un problème où il semble que la classe HttpWebRequest dans le framework ne 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 regarder comme tel:

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$0C$CE$A2$D6$AD$D4!2$8A$EF$E8n$91$96$E1$D7$C8$0F$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$0C$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 les Response.Cookies, je vois bien plus de cookies que je m'attends, avec des valeurs de différents cookies étant divisés en différents cookies.

manuellement obtenir les en-têtes semble entraîner plus wierdness

par exemple: le code

foreach(string cookie in response.Headers.GetValues("Set-Cookie")) 
{ 
    Console.WriteLine("Cookie found: " + cookie); 
} 

produit la sortie:

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$0C$CE$A2$D6$AD$D4!2$8A$EF$E8n$91$96$E1$D7$C8$0 
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$0C$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=/ 

comme vous pouvez le voir - le premier cookie dans la liste des réponses brutes:

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

devient divisé en:

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

Alors, que se passe-t-il ici?

  • Ai-je raison?
  • La classe HttpWebRequest analyse-t-elle de façon incorrecte les en-têtes http?
  • Le serveur Web crache-t-il les requêtes en produisant des en-têtes HTTP non valides?
+0

Est-ce expedia? –

Répondre

2

Les virgules dans les valeurs de cookie doivent être évitées - vous devrez peut-être les encoder différemment.

Le netscape spec original pour les cookies était un peu vague sur cette question, indiquant

NOM = VALEUR: Cette chaîne est une séquence de caractères à l'exclusion point-virgule, virgule et espace blanc. Si vous avez besoin de placer ces données dans le nom ou la valeur, , une méthode de codage telle que le codage URL style % XX est recommandée, bien qu'aucun codage ne soit défini ou requis.

recommandé, mais pas requis! Vous pouvez utiliser la surcharge de nombres entiers de GetValues ​​(i);

0

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.

0

vous devriez seulement récupérer 7 cordes puis