【问题标题】:restsharp - no cookie in response objectrestsharp - 响应对象中没有 cookie
【发布时间】:2014-01-05 19:07:48
【问题描述】:

我对本地主机服务器的请求之一有问题。

为了进行身份验证,我需要两个 cookie,一个来自 sendReqForToken() 方法,一个来自 sendLoginReq(string login, string pass)。

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

我不知道为什么一个请求有一个 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<Token.RootObject>(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。

非常感谢您的任何想法。

【问题讨论】:

    标签: c# windows-phone-7 cookies restsharp


    【解决方案1】:

    感谢@KarthikNishanth。说清楚:

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

    var clientRestClient

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

    【讨论】:

    • 非常感谢。我得到了饼干
    【解决方案2】:

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

    查看此链接answer to your question

    【讨论】:

    • 谢谢,我几天前解决了这个问题。我在我的 ruby​​ 服务器中将 HTTPOnly 参数更改为 false。现在一切正常!
    • 所以,我在RestClient 中添加了一个新的CookieContainer,然后在执行请求后,RestClientCookieContainer 将拥有cookie。然后我使用GetCookieHeader() 来获取实际的cookie
    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    相关资源
    最近更新 更多