Pregunta

Estoy seguro de que debo estar haciendo algo mal. Pero por mi vida no puedo entender lo que está pasando.

Tengo un problema en el que parece que la clase HttpWebRequest en el marco no analiza correctamente las cookies de una respuesta web.

Estoy usando Fiddler para ver qué está pasando y después de hacer una solicitud, los encabezados de la respuesta se ven así:

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

Pero cuando miro la respuesta. Cookies, veo muchas más cookies de las que esperaba, con valores de diferentes cookies divididas en diferentes cookies.

Obtener los encabezados manualmente parece dar lugar a más extrañeza

por ejemplo: el código

<*>

produce la salida:

<*>

como puede ver, la primera cookie en la lista de respuesta sin formato:

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

se está dividiendo en:

  1. Cookie encontrada: usuario = v.5
  2. Cookie encontrada: 0
  3. Cookie encontrada: EX01E508801E $ ..........

Entonces, ¿qué está pasando aquí?

  • ¿Estoy equivocado?
  • ¿La clase HttpWebRequest analiza incorrectamente los encabezados http?
  • ¿El servidor web que escupe las solicitudes produce encabezados http inválidos?
¿Fue útil?

Solución

Se deben evitar las comas en los valores de las cookies; es posible que deba codificarlas de manera diferente.

La especificación de netscape original para cookies era un poco vaga en este tema. , indicando

  

NOMBRE = VALOR:       Esta cadena es una secuencia de caracteres excluyendo punto y coma, coma   y espacio en blanco. Si hay una necesidad de   colocar dichos datos en el nombre o valor,   algún método de codificación como el estilo de URL   Se recomienda la codificación% XX, aunque no   la codificación se define o se requiere.

recomendado, pero no requerido !

Otros consejos

Parece que el servidor envía valores de cookies incorrectos. No se permiten comas en mi humilde opinión en los valores de cookies. Deben codificarse con% 2C.

es posible que desee utilizar la sobrecarga de enteros de GetValues ??(i); solo deberías recuperar 7 cadenas y luego

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top