Stranezza del cookie di HttpWebRequest
-
22-07-2019 - |
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$CAforeach(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$C8Cookie 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:
- Set-Cookie: utente = v.5,0, EX01E508801
viene diviso in:
- Cookie trovato: utente = v.5
- Cookie trovato: 0
- 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?
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