HttpWebRequest Cookie rareza
-
22-07-2019 - |
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$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
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:
- Set-Cookie: usuario = v.5,0, EX01E508801
se está dividiendo en:
- Cookie encontrada: usuario = v.5
- Cookie encontrada: 0
- 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?
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