Domanda

Sono sicuro di dover fare qualcosa di sbagliato. Ma non posso per la vita di me capire cosa sta succedendo.

Ho un problema in cui sembra che la classe HttpWebRequest nel framework non stia analizzando correttamente i cookie da una risposta web.

Sto usando Fiddler per vedere cosa sta succedendo e dopo aver fatto una richiesta, le intestazioni della risposta sembrano tali:

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

Ma quando guardo la risposta. Cookie, vedo molti più cookie che mi aspetto, con valori di cookie diversi suddivisi in cookie diversi.

Ottenere manualmente le intestazioni sembra tradursi in maggiore stranezza

ad es .: il codice

<*>

produce l'output:

<*>

come puoi vedere - il primo cookie nell'elenco risposta non elaborata:

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

viene diviso in:

  1. Cookie trovato: utente = v.5
  2. Cookie trovato: 0
  3. Cookie trovato: EX01E508801E $ ..........

Quindi - cosa sta succedendo qui?

  • Sbaglio?
  • La classe HttpWebRequest analizza erroneamente le intestazioni http?
  • Il server web sta sputando le richieste producendo intestazioni http non valide?
È stato utile?

Soluzione

Le virgole nei valori dei cookie devono essere evitate: potrebbe essere necessario codificarle diversamente.

L'originale netscape spec per i cookie era un po 'vago su questo problema , dichiarando

  

NAME = VALUE:       Questa stringa è una sequenza di caratteri esclusi punti e virgola, virgola   e spazio bianco. Se ce n'è bisogno   inserire tali dati nel nome o nel valore,   alcuni metodi di codifica come lo stile URL   Si consiglia la codifica% XX, anche se no   la codifica è definita o obbligatoria.

raccomandato, ma non richiesto !

Altri suggerimenti

Sembra che il server invii valori di cookie errati. Le virgole IMHO non sono consentite nei valori dei cookie. Devono essere codificati con% 2C.

potresti voler usare il sovraccarico intero di GetValues ??(i); dovresti recuperare solo 7 stringhe quindi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top