3

System.net.http에서 새 .net 4.5 HttpClient를 사용하려고합니다. HttpResponseMessage에서 현재 쿠키/세션 ID를 얻으려면 어떻게해야합니까?

나는 설정 제 의뢰인이

CookieContainer cookieJar = new CookieContainer(); 
     HttpClientHandler handler = new HttpClientHandler 
     { 
      CookieContainer = cookieJar, 
      AllowAutoRedirect = true 
     }; 
     handler.UseCookies = true; 
     handler.UseDefaultCredentials = false; 

     HttpClient client = new HttpClient(handler as HttpMessageHandler); 

처럼 나는이 client.GetAsync(url)

가 지금은 응답을 검사하고 다음 게시물에 대한 쿠키/세션 값을 얻기 위해 노력하고있다 않습니다.

내가 코드를 통해 기존 페이지의 로그인 시나리오를 테스트하려고 ...

어떻게 응답의 쿠키 정보를 얻을 수 있습니까? 아니면 내가 여기서 잘못된 길로 걸을 것인가? 설명이 환상적 일 것입니다 ...

답변

0

HTTP 응답의 'Set-Cookie'헤더를 확인할 수 있습니다.

+0

을 나는 속성에 액세스하려면 어떻게합니까? response.Headers는 HttpResponseHeaders 유형이지만 메소드 나 속성을 포함하지 않습니다. Set-Cookie '자세한 내용을 참조하십시오. – silverfighter

+0

응답 유형은 HttpResponseHeaders입니다. 표준 속성 외에도 TryGetValues ​​() 메소드를 통해 키 - 값 쌍에 액세스 할 수 있습니다. http://en.wikipedia.org/wiki/HTTP_cookie를 참조하십시오. –

0

쿠키를 가져오고 다음 번 POST를 위해 쿠키를 다시 지정할 필요가 없습니다. HttpClient가이를 처리합니다.

게시 할 URL이 쿠키에 의해 정의 된 경로 내에 있으면 쿠키가 요청과 함께 자동으로 다시 보내집니다. 이 같은 쿠키,

public class CookieController : ApiController 
    { 
     public HttpResponseMessage Get() { 
      var httpResponseMessage = new HttpResponseMessage(); 
      var cookieHeaderValues = new List<CookieHeaderValue>(); 
      cookieHeaderValues.Add(new CookieHeaderValue("foo","bar") 
             {Domain = "myhost",Path = "/"}); 
      httpResponseMessage.Headers.AddCookies(cookieHeaderValues); 
      return httpResponseMessage; 
     } 
    } 

http://myhost/ 아래에있는 URL에 대한 요청을 만드는 경우

예를 들어, 자동으로 쿠키를 전송됩니다.

3

쿠키는 클라이언트에서 쿠키를 만드는 명령 인 헤더 형태로 존재합니다. 이러한 헤더는 "CookieTitle = {form encoded value}"값을 갖는 실제 머리글로 "Set-Cookie"형식을 갖습니다. 그 쿠키를 얻는 것은 다음과 같습니다 당신과 같이 표시됩니다 헤더의 원시 문자열을 가져옵니다

var cookieTitle = "MyCookieTitle"; 

var response = ... // get response object 
var cookie = response.Headers.GetValues("Set-Cookie").First(x => x.StartsWith(cookieTitle)); 

:

CookieTitle=this+is+the+value+of+the+cookie