using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.Networking; public class HttpRequest : SingletonMonobehaviour { public const string defaultHttpContentType = "application/x-www-form-urlencoded"; public const string jsonHttpContentType = "application/json ; charset=utf-8"; public async void RequestHttpPost(string _url, IDictionary _parameters, string _contentType, int _retry = 3, Action _result = null) { var content = HashtablaToString(_parameters); var task = HttpBehaviour.CreateAsync(_url, "POST", content, _contentType, _retry, _result); task.Forget(); } public async void RequestHttpPost(string _url, string _content, string _contentType, int _retry = 3, Action _result = null) { var task = HttpBehaviour.CreateAsync(_url, "POST", _content, _contentType, _retry, _result); task.Forget(); } public async void RequestHttpGet(string _url, string _contentType, int _retry = 3, Action _result = null) { var task = HttpBehaviour.CreateAsync(_url, "GET", "", _contentType, _retry, _result); task.Forget(); } public async UniTask<(bool ok, string message)> UnityWebRequestGetAsync(string _url, string _contentType, int _retry = 3, Action _result = null) { return await HttpBehaviour.CreateAsync(_url, "GET", "", _contentType, _retry, _result); } //2024-09-26 HttpWebRequest Get CDN资源在某些节日可能无法访问 包含keepalive的设定等不同情况 改用UnityWebRequest //获取CDN资源不建议使用HttpWebRequest public async UniTask<(bool ok, string message)> UnityWebRequestGet(string _url, int timeout = 5, Action _result = null) { return await GetDataAsync(_url, timeout, _result); } private static async UniTask<(bool ok, string message)> GetDataAsync(string remoteURL, int timeout, Action _result = null) { using (UnityWebRequest request = UnityWebRequest.Get(remoteURL)) { request.timeout = timeout; await request.SendWebRequest(); var ok = request.result == UnityWebRequest.Result.Success; var message = ok ? request.downloadHandler.text : request.error; _result?.Invoke(ok, message); return (ok, message); } } static StringBuilder buffer = new StringBuilder(); public static string HashtablaToString(IDictionary parameters) { buffer.Remove(0, buffer.Length); int i = 0; foreach (KeyValuePair item in parameters) { if (i > 0) { buffer.AppendFormat("&{0}={1}", item.Key, item.Value); } else { buffer.AppendFormat("{0}={1}", item.Key, item.Value); } i++; } string result = buffer.ToString(); return result; } }