unity 網絡請求(異步和同步)

1.網絡請求(同步請求)

        //get請求
        public static string HttpGet(string Url)
        {
            LogUtils.Trace("http-get 發(fā)送消息 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;//連接后接受數(shù)據(jù)超時
            HttpWebResponse response;
            string retString;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
                // 獲得Response的流
                Stream myResponseStream = response.GetResponseStream();
                //讀取流數(shù)據(jù)
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                retString = myStreamReader.ReadToEnd();
                LogUtils.Trace("http-get 成功 url:{0} data:{1}", Url, retString);
                //讀取完成  關閉數(shù)據(jù)流
                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;//連接后接受數(shù)據(jù)超時
            
            LogUtils.Trace("http-post 發(fā)送 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 發(fā)送 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 發(fā)送 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();

        }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容