using Newtonsoft.Json.Linq; using System.Collections; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Unity.VisualScripting.Antlr3.Runtime; using UnityEngine; using UnityEngine.Networking; /*public class web : MonoBehaviour { //public const string URL = "http://47.109.133.52"; // 存储服务器返回的Cookie private static Dictionary cookieJar = new Dictionary(); public static async Task SendRequest(string url,string method = "GET",string jsonData = "{}", Dictionary head = null) { //Debug.Log(url + "启动web"); using (UnityWebRequest request = new UnityWebRequest(url, method)) { // 设置下载处理器 request.downloadHandler = new DownloadHandlerBuffer(); // 如果是POST请求,设置请求体 if (method == "POST" && jsonData != null) { byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonData); request.uploadHandler = new UploadHandlerRaw(bodyRaw); request.SetRequestHeader("Content-Type", "application/json"); } //设置请求头 if (head != null) foreach (string key in head.Keys) { //request.SetRequestHeader("Authorization", token); request.SetRequestHeader(key, head[key]); } // 设置已存储的 Cookie if (cookieJar.Count > 0) { string cookieHeader = ""; foreach (var cookie in cookieJar) { cookieHeader += $"{cookie.Key}={cookie.Value}; "; } request.SetRequestHeader("Cookie", cookieHeader); } // 发送请求并等待响应 var operation = request.SendWebRequest(); while (!operation.isDone) await Task.Yield(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { Debug.LogError($"Error: {request.error}" + url); //Promptmgr.Instance.PromptBubble(request.error, Color.black,Color.red); return null; } else { // 处理返回的Cookie string setCookieHeader; string str = request.downloadHandler.text; Debug.Log(str); if (request.GetResponseHeaders().TryGetValue("Set-Cookie", out setCookieHeader)) { string[] cookies = setCookieHeader.Split(';'); foreach (var cookie in cookies) { var cookieParts = cookie.Split('='); if (cookieParts.Length == 2) { string key = cookieParts[0].Trim(); string value = cookieParts[1].Trim(); cookieJar[key] = value; } } } // 返回响应内容 return request.downloadHandler.text; } } } }*/ public class web : MonoBehaviour { //public const string URL = "http://47.109.133.52"; // 被注释掉的服务器地址(常量) // 存储服务器返回的Cookie private static Dictionary cookieJar = new Dictionary(); // 发送HTTP请求的方法,支持GET和POST等不同的请求方式 public static async Task SendRequest(string url, string method = "GET", string jsonData = "{}", Dictionary head = null) { //Debug.Log(url + "启动web"); // 调试输出,启动网络请求 // 使用UnityWebRequest类进行HTTP请求,支持自定义请求方法 using (UnityWebRequest request = new UnityWebRequest(url, method)) { // 设置下载处理器,用于处理服务器响应的数据 request.downloadHandler = new DownloadHandlerBuffer(); // 如果是POST请求,设置请求体 if (method == "POST" && jsonData != null) { // 将JSON字符串转换为字节数组 byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonData); // 设置上传处理器,用于发送请求体数据 request.uploadHandler = new UploadHandlerRaw(bodyRaw); // 设置请求头,指定请求体内容类型为JSON request.SetRequestHeader("Content-Type", "application/json"); } // 如果请求头部存在,添加请求头部信息 if (head != null) foreach (string key in head.Keys) { // 遍历传入的头部字典,逐项设置请求头部 request.SetRequestHeader(key, head[key]); } // 设置已存储的 Cookie if (cookieJar.Count > 0) { // 用于存储多个cookie值的字符串 string cookieHeader = ""; foreach (var cookie in cookieJar) { // 格式化每个cookie为“键=值”的形式,并附加到字符串中,以分号分隔 cookieHeader += $"{cookie.Key}={cookie.Value}; "; } // 设置请求头中的Cookie字段 request.SetRequestHeader("Cookie", cookieHeader); } // 发送请求并等待响应 var operation = request.SendWebRequest(); while (!operation.isDone) await Task.Yield(); // 等待请求完成,使用await以非阻塞的方式处理 // 检查是否存在网络错误或协议错误 if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { // 如果有错误,输出错误信息并返回null Debug.LogError($"Error: {request.error}" + url); // 可以自定义弹窗提示用户错误信息,代码被注释掉了 // Promptmgr.Instance.PromptBubble(request.error, Color.black,Color.red); return null; } else { // 处理返回的Cookie string setCookieHeader; string str = request.downloadHandler.text; // 获取服务器返回的文本内容 Debug.Log(str); // 输出返回内容到控制台 // 尝试获取响应头中的“Set-Cookie”字段 if (request.GetResponseHeaders().TryGetValue("Set-Cookie", out setCookieHeader)) { // 将“Set-Cookie”字段的内容按分号分隔为多个部分 string[] cookies = setCookieHeader.Split(';'); foreach (var cookie in cookies) { // 将每个cookie分为“键=值”的形式 var cookieParts = cookie.Split('='); if (cookieParts.Length == 2) { string key = cookieParts[0].Trim(); // 去掉键的空格 string value = cookieParts[1].Trim(); // 去掉值的空格 // 存储到cookieJar中,以备后续请求使用 cookieJar[key] = value; } } } // 返回响应内容(文本形式) return request.downloadHandler.text; } } } }