restsharp – 响应对象中没有cookie

我对localhost服务器的一个请求有问题。

要进行身份validation,我需要两个cookie,一个来自sendReqForToken()方法,另一个来自sendLoginReq(字符串登录,字符串传递)。

作为回应,我从sendLoginReq获取cookie,但不是从sendReqForToken()获取cookie。

我不知道为什么一个请求有一个cookie第二个没有。

有趣的是,我从sendReqForToken()方法获得了正确的令牌(响应内容是正确的),但响应头中没有任何cookie。

这是sendReqForToken()方法体:

public void sendReqForToken() { string adres = Globals.TOKEN_URL; RestRequest request = new RestRequest(adres, Method.GET); var client = new RestClient(); client.CookieContainer = new CookieContainer(); client.ExecuteAsync(request, (response) => { if (response.StatusCode == HttpStatusCode.OK) { var tokenValue = JsonConvert.DeserializeObject(response.Content); DataManager.Instance.authToken = tokenValue.authenticity_token; if (response.Cookies.Count > 0) { var cookie = response.Cookies.FirstOrDefault(); DataManager.Instance.cookieJar.Add(new Uri(Globals.TOKEN_URL), new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain)); } } else { } }); } 

response.Cookies.Count总是等于0. response.cookies属性总是等于null。

这是sendLoginReq方法体:

  public void sendLoginReq(string login, string pass) { login = "admin"; pass = "admin"; string adres = Globals.LOGIN_URL; RestRequest request = new RestRequest(adres, Method.POST); var client = new RestClient(); request.RequestFormat = DataFormat.Json; try { request.AddBody(new { authenticity_token = DataManager.Instance.authToken, commit = "Login", utf8 = true, user_session = new { email = login, password = pass } }); } catch { } client.ExecuteAsync(request, (response) => { if (response.StatusCode == HttpStatusCode.OK) { if (response.StatusCode == HttpStatusCode.OK) { var cookie = response.Cookies.FirstOrDefault(); DataManager.Instance.cookieJar.Add(new Uri(Globals.LOGIN_URL), new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain)); } } else { } }); } 

在第二种方法中,我得到正确的cookie。

非常感谢任何想法。

我有同样的问题,你的服务器发送一个带有HTTPonly = true参数的cookie,你应该将HTTOnly参数改为false然后你可以从令牌响应中获取cookie。

看到这个链接回答你的问题

谢谢@KarthikNishanth。 说清楚:

 client.CookieContainer = new CookieContainer (); var cookie = client.CookieContainer.GetCookieHeader(new Uri("http://domain_or_subdomain.ext")); 

var client是一个RestClient

client.Execute(request); GetCookieHeader()将返回所需的cookie