zoukankan      html  css  js  c++  java
  • restsharp发送服务端请求回传session

    今天工作遇到这样一个场景,我需要获取一个游戏目录列表,这个列表接口在线上已经存在,但是这个接口需要登录认证后才能获取到,所以实现这个功能我打算分两部来做:

    1、首先调登录接口,以写上session

    2、调游戏目录接口

    在测试中,走第二步时,始终获取不到游戏目录,提示session 不存在,我就纳闷了。。明明已经写上session了啊,接着我用浏览器测试了这个步骤,完全是能跑通的,但是仔细一看,使用浏览器抛第二个接口时,请求头中会把sessionid带上,瞬间顿悟:

    当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象,当浏览器下次(session继续有效时)请求别的资源的时候,浏览器会偷偷地将sessionID放置到请求头中,服务器接收到请求后就得到该请求的sessionID,服务器找到该id的session返还给请求者使用。一个会话只能有一个session对象,对session来说是只认id不认人。

    然后决定尝试模拟浏览器,再发起第一个请求后把服务端返回的sessionid保存下来,然后再调用第二个接口时,请求头带上这个sessionid,果然把问题给解决了,附代码如下:

    private static RestResponseCookie prelogin(string serverurl, string userid, string key, string serverid, string strTimestamp, string source, string usersource)
            {
                string url = "";
                string SignValueFormat = string.Format("serverid={0}&userid={1}&usersource={2}&timestamp={3}&key={4}", serverid, userid, usersource, strTimestamp, key);
                string Sign = TR188.Utils.Security.TrSecurity.getMd5Hash(SignValueFormat);
                url = serverurl + "GS/Per_CheckLogin/";
    
                var data = new SortedDictionary<string, string>();
                data.Add("serverid", serverid);
                data.Add("userid", userid.ToString());
                data.Add("usersource", usersource + "/" + source);
                data.Add("timestamp", strTimestamp);
                data.Add("hash", Sign);
    
                var request = new RestRequest(Method.GET);
                try
                {
                    var client = GetRequest(url, data, ref request);
                    var resp = client.Execute<List<GameService>>(request);
                    return resp.Cookies.SingleOrDefault(x => x.Name == "ASP.NET_SessionId");
    
                }
                catch (System.Exception ex)
                {
                    url = "";
                    log.Error("check per_login error!" + ex.Message);
                }
                return null;
            }
     1                 DESEncrypt des = new DESEncrypt();
     2                 uint Access_deskey = uint.Parse(DateTime.Now.ToString("yyyyMMddHH"));
     3 
     4                 string accesskey = des.EncryptDES("userid=" + userid.ToString() + "&timestamp=" + timestamp.ToString(), Access_deskey);
     5                 var data = new SortedDictionary<string, string>();
     6                 data.Add("usersource", "baidu");
     7                 data.Add("userid", userid.ToString());
     8                 data.Add("accesskey", accesskey);
     9 
    10                 var request = new RestRequest(Method.GET);
    11                 try
    12                 {
    13                     CookieContainer _cookieJar = new CookieContainer();
    14                     _cookieJar.Add(new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain));
    15                     var client = GetRequest(url, data, ref request);
    16                     client.CookieContainer = _cookieJar;
    17                     var resp = client.Execute<List<GameService>>(request);
    18                     log.InfoFormat("getwebgamelist:content={0}", resp.Content);
    19                     using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(resp.Content)))
    20                     {
    21                         DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(List<GameService>));
    22                         List<GameService> result = (List<GameService>)json.ReadObject(stream);
    23                         return result;
    24                     }
    25                 }
    26                 catch (Exception ex)
    27                 {
    28                     log.Error("getwebgamelist:" + ex.Message);
    29                 }
  • 相关阅读:
    JS数组的相关方法
    JS字符串的相关方法
    重回我的园区
    STM32F405串口UART4波特率注意问题
    NXP MCU开始学习中
    锂电池测试
    FPGA与STM32并口通信
    NXP LPC4350绝对强悍,准备入手学习
    SDRAM+FPGA+MCU
    STM32+FPGA通信成功
  • 原文地址:https://www.cnblogs.com/xuxzx/p/4042342.html
Copyright © 2011-2022 走看看