문제

내가 뭔가 잘못하고 있는 게 틀림없어요.그러나 나는 평생 무슨 일이 일어나고 있는지 알아낼 수 없습니다.

프레임워크의 HttpWebRequest 클래스가 웹 응답에서 쿠키를 올바르게 구문 분석하지 않는 것 같은 문제가 있습니다.

Fiddler를 사용하여 무슨 일이 일어나고 있는지 확인하고 요청한 후 응답 헤더는 다음과 같습니다.

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

하지만 응답 쿠키를 보면 예상한 것보다 훨씬 더 많은 쿠키가 표시되며, 다양한 쿠키의 값이 여러 쿠키로 분할되어 있습니다.

헤더를 수동으로 가져오는 것이 더 이상해지는 것 같습니다.

예:코드

foreach(string cookie in response.Headers.GetValues("Set-Cookie"))
{
    Console.WriteLine("Cookie found: " + cookie);
}

출력을 생성합니다.

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=/

보시다시피 - 목록 원시 응답의 첫 번째 쿠키는 다음과 같습니다.

  1. 세트 쿠키:사용자=v.5,0,EX01E508801

다음과 같이 분할됩니다.

  1. 쿠키 발견:사용자=v.5
  2. 쿠키 발견:0
  3. 쿠키 발견:EX01E508801E$..........

그럼 - 여기서 무슨 일이 일어나고 있는 걸까요?

  • 내가 잘못?
  • HttpWebRequest 클래스가 http 헤더를 잘못 구문 분석하고 있습니까?
  • 잘못된 http 헤더를 생성하는 요청을 내보내는 웹 서버입니까?
도움이 되었습니까?

해결책

쿠키 값의 쉼표는 피해야합니다. 다르게 인코딩해야 할 수도 있습니다.

원래 Netscape 사양 이 문제에 대해 쿠키는 약간 모호했기 때문에

이름 = 값 :이 문자열은 세미콜론, 쉼표 및 공백을 제외한 일련의 문자입니다. 이러한 데이터를 이름 또는 값에 배치 할 필요가있는 경우 URL 스타일 %XX 인코딩과 같은 일부 인코딩 방법이 권장되지만 인코딩이 정의되거나 필요하지는 않습니다.

추천하지만 그렇지 않습니다 필수의!

다른 팁

서버가 잘못된 쿠키 값을 보내는 것 같습니다. IMHO 쉼표는 쿠키 값으로 허용되지 않습니다. %2c로 인코딩해야합니다.

GetValues(i)의 정수 오버로드를 사용할 수도 있습니다.그러면 7개의 문자열만 반환해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top