restsharp - 响应对象中没有cookie

 手机用户2502913993 发布于 2023-02-06 13:38

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

要进行身份验证,我需要两个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.

非常感谢任何想法.

1 个回答
  • 谢谢@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

    2023-02-06 13:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有