using System.Collections; using UnityEngine; using System; using UnityEngine.Networking; using System.Text; using GFGGame.Launcher; namespace GFGGame { /// /// Http Request SDK /// public class HttpTool : SingletonMonoBase { public void Get(string prefixUrl, string methodName, Action callback) { StartCoroutine(GetRequest(prefixUrl, methodName, callback)); } public IEnumerator GetRequest(string prefixUrl, string methodName, Action callback) { string url = prefixUrl + methodName; Debug.Log("get url : " + url); using (UnityWebRequest webRequest = UnityWebRequest.Get(url)) { webRequest.timeout = LauncherConfig.HTTP_GET_TIME_OUT; yield return webRequest.SendWebRequest(); ResultHandler(webRequest, callback, prefixUrl, () => { Get(prefixUrl, methodName, callback); }); } } //jsonString 为json字符串,post提交的数据包为json public void Post(string prefixUrl, string methodName, string jsonString, Action callback) { StartCoroutine(PostRequest(prefixUrl, methodName, jsonString, callback)); } public IEnumerator PostRequest(string prefixUrl, string methodName, string jsonString, Action callback) { string url = prefixUrl + methodName; Debug.Log(string.Format("post url:{0} postData:{1}", url, jsonString)); using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST")) { byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonString); webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw); webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer(); webRequest.timeout = LauncherConfig.HTTP_POST_TIME_OUT; //http header 的内容 webRequest.SetRequestHeader("Content-Type", "application/json"); // webRequest.timeout; yield return webRequest.SendWebRequest(); ResultHandler(webRequest, callback, jsonString, () => { Post(prefixUrl, methodName, jsonString, callback); }); } } public void ResultHandler(UnityWebRequest webRequest, Action callback, string tag, Action retryCall) { string paramCallback = null; if (webRequest.result == UnityWebRequest.Result.ProtocolError || webRequest.result == UnityWebRequest.Result.ConnectionError) { Debug.LogError(webRequest.error + "\n" + webRequest.downloadHandler.text); Alert.Show("连接服务器失败:\n请检查网络和服务器状态") .SetRightButton(true, "重试", (object data) => { retryCall(); }); } else { Debug.Log("from server " + webRequest.downloadHandler.text + "\nby " + tag); paramCallback = webRequest.downloadHandler.text; //paramCallback = System.Text.Encoding.UTF8.GetString(webRequest.downloadHandler.data, 3, webRequest.downloadHandler.data.Length - 3); callback?.Invoke(paramCallback); } } } }