using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Cysharp.Threading.Tasks; using InterfaceEntity.Entity.Requests; using Newtonsoft.Json; using UnityEngine; using UnityEngine.Networking; namespace Stary.Evo { public static class WebRequestSystem { private static string authorization; public static async Task Login(string url, string username, string password) { var data = new { username = username, password = password, roleType = "client", }; string postData = JsonConvert.SerializeObject(data); using (UnityWebRequest webRequest = UnityWebRequest.Post(url, postData)) //第二种写法此行注释 { byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData); webRequest.uploadHandler = new UploadHandlerRaw(postBytes); webRequest.SetRequestHeader("Content-Type", "application/json"); await webRequest.SendWebRequest(); webRequest.uploadHandler?.Dispose(); // 更新错误检查方式 if (webRequest.result == UnityWebRequest.Result.ConnectionError || webRequest.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError(webRequest.error); } else { ResultMessageEntity authResponse = JsonConvert.DeserializeObject(webRequest.downloadHandler.text); if (authResponse.code == 200) { AuthenticationResponse authResponseData = JsonConvert.DeserializeObject(authResponse.data.ToString()); authorization = authResponseData.Token; PlayerPrefs.SetString("Authorization", authorization); Debug.Log("登录成功"); return true; } } return false; } } /// /// GET请求数据 /// /// 请求数据的URL地址 /// token验证的参数,此处为authorization /// public static async Task GetValidateToken(string url) { authorization = PlayerPrefs.GetString("Authorization"); try { using (UnityWebRequest webRequest = UnityWebRequest.Get($"{url}?token={authorization}")) { webRequest.downloadHandler = new DownloadHandlerBuffer(); await webRequest.SendWebRequest(); // 增强错误处理 if (webRequest.result != UnityWebRequest.Result.Success) { var errorMsg = $"HTTP {webRequest.responseCode}\n" + $"URL: {url}\n" + $"Error: {webRequest.error}\n" + $"Response: {webRequest.downloadHandler.text}"; Debug.LogError(errorMsg); return false; } ResultMessageEntity resultMessageEntity = JsonConvert.DeserializeObject(webRequest.downloadHandler.text); if (resultMessageEntity.code == 200) return true; // 添加返回值 else return false; } } catch (Exception e) { Debug.LogError(e); } return false; } /// /// POST请求数据 /// /// 获取Token值的服务URL地址(很重要) /// 传入请求的参数,此处参数为JOSN格式 /// public static async Task PostFile(string url, string[] path) { if (!GetTokenState()) { Debug.LogError("用户未登录,请先登录"); return new ResultMessageEntity() { code = 2001, message = "用户未登录,请先登录" }; } //UnityWebRequest[] files = new UnityWebRequest[3]; WWWForm form = new WWWForm(); for (int i = 0; i < path.Length; i++) { byte[] bytes = await File.ReadAllBytesAsync(path[i]); form.AddBinaryData("files[]", bytes, Path.GetFileName(path[i])); } using (UnityWebRequest webRequest = UnityWebRequest.Post(url, form)) { webRequest.SetRequestHeader("Authorization", authorization); webRequest.disposeUploadHandlerOnDispose = true; webRequest.disposeDownloadHandlerOnDispose = true; webRequest.disposeCertificateHandlerOnDispose = true; await webRequest.SendWebRequest(); webRequest.uploadHandler?.Dispose(); // 更新错误检查方式 if (webRequest.result == UnityWebRequest.Result.ConnectionError || webRequest.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError(webRequest.error); return new ResultMessageEntity() { code = 5001, message = webRequest.error }; } else { ResultMessageEntity resultMessageEntity = JsonConvert.DeserializeObject(webRequest.downloadHandler.text); if (resultMessageEntity.code != 200) { Debug.LogError("上传异常,无文件数据返回!!"); } return resultMessageEntity; } } } /// /// GET请求数据 /// /// 请求数据的URL地址 /// token验证的参数,此处为authorization /// public static async Task GetFile(string url,string tempPath, Action downloadProgress = null) { if (!GetTokenState()) { Debug.LogError("用户未登录,请先登录"); return new ResultMessageEntity() { code = 2001, message = "用户未登录,请先登录" }; } try { using (UnityWebRequest webRequest = UnityWebRequest.Get(url)) { webRequest.downloadHandler = new DownloadHandlerFile(tempPath); if (authorization != null) webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范 var operation= webRequest.SendWebRequest(); while (!operation.isDone) { downloadProgress?.Invoke(webRequest.downloadProgress); await UniTask.Yield(); } // 增强错误处理 if (webRequest.result != UnityWebRequest.Result.Success) { var errorMsg = $"HTTP {webRequest.responseCode}\n" + $"URL: {url}\n" + $"Error: {webRequest.error}\n"; Debug.LogError(errorMsg); return new ResultMessageEntity() { code = 5001, message = errorMsg }; } else { return new ResultMessageEntity() { code = 200, message = "下载成功" }; } } } catch (Exception e) { Debug.LogError(e); return new ResultMessageEntity() { code = 5001, message = e.Message }; } } /// /// POST请求数据 /// /// 获取Token值的服务URL地址(很重要) /// 传入请求的参数,此处参数为JOSN格式 /// public static async Task Post(string url, string postData) { if (!GetTokenState()) { Debug.LogError("用户未登录,请先登录"); return new ResultMessageEntity() { code = 2001, message = "用户未登录,请先登录" }; } using (UnityWebRequest webRequest = UnityWebRequest.Post(url, postData)) //第二种写法此行注释 { byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData); webRequest.uploadHandler = new UploadHandlerRaw(postBytes); webRequest.SetRequestHeader("Content-Type", "application/json"); webRequest.SetRequestHeader("Authorization", authorization); webRequest.disposeUploadHandlerOnDispose = true; webRequest.disposeDownloadHandlerOnDispose = true; webRequest.disposeCertificateHandlerOnDispose = true; await webRequest.SendWebRequest(); webRequest.uploadHandler?.Dispose(); // 更新错误检查方式 if (webRequest.result == UnityWebRequest.Result.ConnectionError || webRequest.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError(webRequest.error); return new ResultMessageEntity() { code = 5001, message = webRequest.error }; } else { ResultMessageEntity resultMessageEntity = JsonConvert.DeserializeObject(webRequest.downloadHandler.text); if (resultMessageEntity.code != 200) { Debug.LogError(resultMessageEntity.message); } return resultMessageEntity; } } } /// /// GET请求数据 /// /// 请求数据的URL地址 /// token验证的参数,此处为authorization /// public static async Task Get(string url) { if (!GetTokenState()) { Debug.LogError("用户未登录,请先登录"); return new ResultMessageEntity() { code = 2001, message = "用户未登录,请先登录" }; } try { using (UnityWebRequest webRequest = UnityWebRequest.Get(url)) { webRequest.downloadHandler = new DownloadHandlerBuffer(); if (authorization != null) webRequest.SetRequestHeader("Authorization", authorization); // 修正请求头名称规范 await webRequest.SendWebRequest(); // 增强错误处理 if (webRequest.result != UnityWebRequest.Result.Success) { var errorMsg = $"HTTP {webRequest.responseCode}\n" + $"URL: {url}\n" + $"Error: {webRequest.error}\n" + $"Response: {webRequest.downloadHandler.text}"; Debug.LogError(errorMsg); return new ResultMessageEntity() { code = 5001, message = errorMsg }; } ResultMessageEntity resultMessageEntity = JsonConvert.DeserializeObject(webRequest.downloadHandler.text); if (resultMessageEntity.code != 200) { Debug.LogError(resultMessageEntity.message); } return resultMessageEntity; } } catch (Exception e) { Debug.LogError(e); return new ResultMessageEntity() { code = 5001, message = e.Message }; } } public static bool GetTokenState() { if (string.IsNullOrEmpty(authorization)) { return false; } return true; } } }