HttpWebRequest Biscoito estranheza
-
22-07-2019 - |
Pergunta
Eu tenho certeza que deve estar fazendo algo errado. Mas não posso para a vida de me descobrir o que está acontecendo.
Eu tenho um problema onde parece que a classe HttpWebRequest no quadro não é analisar corretamente os cookies de uma resposta web.
Estou usando o Fiddler para ver o que está acontecendo e depois de fazer um pedido, os cabeçalhos do olhar de resposta como tal:
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
Mas quando eu olhar para as Response.Cookies, eu vejo muito mais cookies que estou esperando, com valores de diferentes biscoitos ser dividido em diferentes cookies.
manualmente obter os cabeçalhos parece resultar em mais wierdness
por exemplo: o código
foreach(string cookie in response.Headers.GetValues("Set-Cookie"))
{
Console.WriteLine("Cookie found: " + cookie);
}
produz a saída:
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=/
Como você pode ver - o primeiro cookie na lista de resposta raw:
- Set-Cookie: user = v.5,0, EX01E508801
está ficando dividido em:
- Cookie encontrado: user = v.5
- Cookie encontrados: 0
- Cookie encontrado: EX01E508801E $ ..........
Então - o que está acontecendo aqui
- Am I errado?
- é a classe HttpWebRequest incorretamente analisar o http cabeçalhos?
- O servidor web que ele cuspindo as solicitações produzindo inválido http cabeçalhos?
Solução
As vírgulas no cookie valores devem ser evitados - você pode precisar codificá-los de forma diferente.
O original Netscape especificação para biscoitos foi um pouco vago sobre esta questão , afirmando
NAME = VALOR: Esta cadeia é uma sequência de caracteres excluindo ponto e vírgula, vírgula e espaço em branco. Se há uma necessidade de colocar tais dados em nome ou valor, algum método de codificação, tais como estilo URL % XX encoding é recomendado, embora não codificação é definida ou necessária.
recomendado, mas não necessário !
Outras dicas
Parece que o servidor envia valores de cookies incorretos. vírgulas IMHO não são permitidos em valores de cookies. Eles precisam ser codificadas com% 2C.
Você pode querer usar a sobrecarga inteiro de GetValues ??(i); você só deve voltar 7 cordas, em seguida,