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:

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

está ficando dividido em:

  1. Cookie encontrado: user = v.5
  2. Cookie encontrados: 0
  3. 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?
Foi útil?

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,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top