美文网首页
unity 网络请求(异步和同步)

unity 网络请求(异步和同步)

作者: 安宇辛 | 来源:发表于2021-03-22 11:26 被阅读0次

1.网络请求(同步请求)

        //get请求
        public static string HttpGet(string Url)
        {
            LogUtils.Trace("http-get 发送消息 url:{0}", Url);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host + Url);
            request.Method = "GET";
            request.ContentType = "application/x-www-form-urlencoded";

            request.Headers["Bundle-Identifier"] = PackageName;
            request.Headers["Device-Token"] = DeviceToken;
            request.Headers["App-Tag"] = AppTag;
            request.Headers["Api-Signature"] = Sha256(string.Format("{0}:{1}", DeviceToken, Signature));
            request.UserAgent = null;
            request.Timeout = 1000;//连接超时
            request.ReadWriteTimeout = 1000;//连接后接受数据超时
            HttpWebResponse response;
            string retString;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
                // 获得Response的流
                Stream myResponseStream = response.GetResponseStream();
                //读取流数据
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                retString = myStreamReader.ReadToEnd();
                LogUtils.Trace("http-get 成功 url:{0} data:{1}", Url, retString);
                //读取完成  关闭数据流
                myStreamReader.Close();
                myResponseStream.Close();

            }
            catch (WebException ex)
            {
                LogUtils.Trace("http-get 失败 url:{0} data:{1}", Url, ex.ToString());
                retString = "{\"status\":500}";

            }

            return retString;
        }

        //post请求
        public static string HttpPost(string Url, Dictionary<string, object> param)
        {

            string Contentjson = JsonConvert.SerializeObject(param);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host + Url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";

            request.Headers["Bundle-Identifier"] = PackageName;
            request.Headers["Device-Token"] = DeviceToken;
            request.Headers["App-Tag"] = AppTag;
            request.Headers["Api-Signature"] = Sha256(string.Format("{0}:{1}:{2}", DeviceToken, Signature, Contentjson));

            request.Timeout = 1000;//连接超时
            request.ReadWriteTimeout = 1000;//连接后接受数据超时
            
            LogUtils.Trace("http-post 发送 url:{0} data:{1}", Url, Contentjson);

            Encoding encoding = Encoding.UTF8;
            byte[] postData = encoding.GetBytes(Contentjson);
            request.ContentLength = postData.Length;
            Stream myRequestStream;
            try
            {
                myRequestStream = request.GetRequestStream();
                myRequestStream.Write(postData, 0, postData.Length);
                myRequestStream.Close();

            }
            catch (WebException ex)
            {
                LogUtils.Trace("http-post 失败 url:{0} e:{1}", Url, ex.ToString());
            }
           
            HttpWebResponse response;
            string retString = "";
            try
            {
                response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, encoding);
                retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
                LogUtils.Trace("http-post 成功 url:{0} data:{1}", Url, retString);
            }
            catch (WebException ex)
            {
                LogUtils.Trace("http-post 失败 url:{0} e:{1}", Url, ex.ToString());
                retString = "{\"status\":500}";
            }


            return retString;
        }

2.网络请求(异步请求)

        //异步Get
        public static async Task<string> GetAsync(string url, double timeout = 1, bool noLog = false)
        {
            if (!noLog) LogUtils.Trace("http-get-async 发送 url:{0}", url);
            HttpClient httpClient = new HttpClient();
            httpClient.Timeout = TimeSpan.FromSeconds(timeout);

            httpClient.DefaultRequestHeaders.Add("Bundle-Identifier", PackageName);
            httpClient.DefaultRequestHeaders.Add("Device-Token", DeviceToken);
            httpClient.DefaultRequestHeaders.Add("App-Tag", AppTag);
            httpClient.DefaultRequestHeaders.Add("Api-Signature", Sha256(string.Format("{0}:{1}", DeviceToken, Signature)));
           
            try
            {
                var response = await httpClient.GetStringAsync(host + url);
                if (!noLog) LogUtils.Trace("http-get-async 成功 url:{0}  data:{1}", url, response);
                return response;
            }
            catch (Exception e)
            {
                if (!noLog) LogUtils.Trace("http-get-async 失败 url:{0} e:{1}", url, e.ToString());
                return null;
            }
        }

        //异步Post
        public static async Task<string> PostAsync(string url, Dictionary<string, object> param, double timeout = 1)
        {
            string Contentjson = JsonConvert.SerializeObject(param);

            HttpClient http = new HttpClient();
            http.Timeout = TimeSpan.FromSeconds(timeout);

            http.DefaultRequestHeaders.Add("Bundle-Identifier", PackageName);
            http.DefaultRequestHeaders.Add("Device-Token", DeviceToken);
            http.DefaultRequestHeaders.Add("App-Tag", AppTag);
            http.DefaultRequestHeaders.Add("Api-Signature", Sha256(string.Format("{0}:{1}:{2}", DeviceToken, Signature, Contentjson)));
            
            LogUtils.Trace("http-post-async 发送 url:{0} data:{1}", url, Contentjson);

            HttpContent httpContent = new StringContent(Contentjson);

            try
            {
                var response = await http.PostAsync(host + url, httpContent);
                var content = await response.Content.ReadAsStringAsync();
                LogUtils.Trace("http-post-async 成功 url:{0} data:{1}", url, content);
                return content;
            }
            catch (Exception e)
            {
                LogUtils.Trace("http-post-async 失败 url:{0} e:{1}", url, e.ToString());
                return null;
            }
        }

3——256加密

        //256加密
        public static string Sha256(string data)
        {
            byte[] bytes = Encoding.UTF8.GetBytes(data);
            byte[] hash = SHA256.Create().ComputeHash(bytes);

            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                builder.Append(hash[i].ToString("X2"));
            }

            return builder.ToString();

        }

相关文章

  • unity 网络请求(异步和同步)

    1.网络请求(同步请求) 2.网络请求(异步请求) 3——256加密

  • 网络协议

    网络请求分为4类:GET同步请求GET异步请求POST同步请求POST异步请求 同步网络请求步骤: 1:创建网址字...

  • Android okHttp网络请求之Get/Post请求

    Android okHttp网络请求之Get/Post请求 异步同步

  • Retrofit 与Okhttp

    OKhttp是个高效的网络求情框架,支持多种网络请求配置,支持同步和异步两种请求方法(同步请求通过call.exe...

  • iOS网络NSURLConnection和NSURLSessio

    HTTP通信过程 NSURLConnection发送网络请求 block 方式 发送同步请求发送同步请求 发送异步...

  • 网络异步请求同步、顺序处理

    一、异步网络请求按顺序请求(信号量) 打印结果 二、多个网络异步请求最后同步(Group) 打印结果 三、多个网络...

  • 异步请求为什么会导致tcp的对头阻塞

    这个异步指的是网络请求不会阻塞其后 js 代码继续执行和浏览器渲染页面其他的部分。 同步和异步 同步和异步关注的是...

  • Okhttp3

    简介 配置 请求思路 get请求思路 post请求思路 get,post 同步和异步请求 异步请求(get) 同步...

  • OkHttp详解

    OkHttp用法 同步和 异步请求 源码解析 Interceptor 是okHttp最核心的东西 网络请求 缓存,...

  • OkHttp源码解析 -- 同步异步处理

    前言: 使用OkHttp,执行网络请求时会有异步还是同步处理。先说下异步和同步的区别,同步并不是指在UI线程中执行...

网友评论

      本文标题:unity 网络请求(异步和同步)

      本文链接:https://www.haomeiwen.com/subject/paqvcltx.html