2015-02-04 3 views
0

.net 클라이언트 API 요청에서 원격 서버로 쿠키를 POST하려고합니다. 요청이 쿠키 데이터의 265 바이트 전송 .NET 클라이언트에서 REST API로 POST가있는 쿠키 보내기

: 내 API 호출을 게시 할 때

cookiesDirective=1; __utmt=1; currentLanguage=EN; 
__utma=198151921.81872271.1398032350.1423043623.1423075781.3; 
__utmb=198151921.3.10.1423075781; 
__utmc=198151921; 
__utmz=198151921.1423043623.2.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided) 

그러나, 내 쿠키 컨테이너가 비어 피들러를 사용

, 내가 필요로하는 쿠키는 다음과 같습니다 볼 수 있습니다 다음 (피들러 따라)

내 코드 :

static async Task RunAsync() 
{ 

    string url = "http://www.myserver.com/Services/GetData"; 

    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:9000/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     var model = new Payload() { pageNumber = 2 }; 

     var cookie = new CookieHeaderValue("session-id", "12345"); 
     cookie.Expires = DateTimeOffset.Now.AddDays(1); 
     cookie.Path = "/"; 

     HttpResponseMessage response = new HttpResponseMessage(); 

     response.Headers.AddCookies(new CookieHeaderValue[] { cookie }); 

     response = await client.PostAsJsonAsync(url, model); 
     if (response.IsSuccessStatusCode) 
     { 
      // Testing 
     } 

    } 
} 
+2

이 http://stackoverflow.com/questions/12373738/how-do-i-set-a-cookie-on-httpclients-httprequestmessage – mikey

+0

도 고려해야합니다 행크스 내가이 다음과 같은 작업있어 @mikey하기 REST 서비스와 통신 할 때 RestSharp (http://restsharp.org/)를 사용하십시오. – slvnperron

+3

* response * 객체에 쿠키를 설정하면 서버가 당신에게 보내는 것을 관리하는 객체가 많이 작동하지 않습니다 . 당신은 * 요청 *을 실제로 보내는 것에 쿠키를 설정할 필요가있다. 이것은 당신의 코드에서'클라이언트'가 될 것이다. 이를 수행하는 방법에 대한 설명은 @mikey가 제공 한 링크를 참조하십시오. –

답변

0

T

string url = "http://www.myserver.com/Services/GetData"; 

    var baseAddress = new Uri(url); 
    using (var handler = new HttpClientHandler { UseCookies = false }) 
    using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) 
    { 
     var message = new HttpRequestMessage(HttpMethod.Post, "/Services/ContentRetrievalService.svc/GetSpecAmountOfFilteredPepole"); 
     message.Headers.Add("Cookie", "cookiesDirective=1; __utmt=1; currentLanguage=EN; __utma=198151921.81872271.1398032350.1423043623.1423075781.3; __utmb=198151921.3.10.1423075781; __utmc=198151921; __utmz=198151921.1423043623.2.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)"); 

     message.Headers.Add("Connection", "keep-alive"); 
     message.Headers.Add("X-Requested-With", "XMLHttpRequest"); 
     message.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36"); 
     message.Headers.Add("Accept-Encoding", "gzip, deflate"); 

     var result = await client.SendAsync(message); 
     result.EnsureSuccessStatusCode(); 
    } 
관련 문제