Frage

Ich bin mir sicher, dass ich etwas falsch mache.Aber ich kann beim besten Willen nicht herausfinden, was los ist.

Ich habe ein Problem, bei dem es so aussieht, als ob die HttpWebRequest-Klasse im Framework die Cookies aus einer Webantwort nicht korrekt analysiert.

Ich verwende Fiddler, um zu sehen, was vor sich geht, und nachdem ich eine Anfrage gestellt habe, sehen die Header der Antwort so aus:

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

Aber wenn ich mir die Antwort „Cookies“ ansehe, sehe ich weit mehr Cookies, als ich erwarte, wobei die Werte verschiedener Cookies in verschiedene Cookies aufgeteilt werden.

Das manuelle Abrufen der Header scheint zu mehr Seltsamkeiten zu führen

z.B:der Code

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

erzeugt die Ausgabe:

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=/

Wie Sie sehen können, ist das erste Cookie in der Rohantwort der Liste:

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

wird aufgeteilt in:

  1. Cookie gefunden:Benutzer=v.5
  2. Cookie gefunden:0
  3. Cookie gefunden:EX01E508801E$.........

Also – was ist hier los?

  • Liege ich falsch?
  • Analysiert die HttpWebRequest-Klasse die HTTP-Header falsch?
  • Spuckt der Webserver, der die Anfragen ausspuckt, ungültige HTTP-Header aus?
War es hilfreich?

Lösung

Kommata in Cookie sind Werte vermieden werden - möglicherweise müssen sie anders kodieren.

Die ursprüngliche Netscape spec für Cookies war ein wenig zu diesem Thema vage Angabe

  

NAME = WERT:       Diese Saite ist eine Folge von Zeichen ohne Semikolon, Komma   und weißer Raum. Wenn es eine Notwendigkeit,   legt diese Daten im Namen oder Wert,   einige Codierverfahren, wie beispielsweise URL-Stil   % XX Codierung wird empfohlen, obwohl kein   Codierung definiert ist oder erforderlich ist.

empfohlen, aber nicht erforderlich

Andere Tipps

Es scheint, dass der Server eines falschen Cookie-Wert sendet. IMHO Kommas sind nicht in Cookie-Werte erlaubt. Sie müssen mit% 2C codiert werden.

Möglicherweise möchten Sie die Ganzzahlüberladung von GetValues(i) verwenden.Sie sollten dann nur 7 Saiten zurückbekommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top