找回密码
 立即注册
查看: 243|回复: 0

Unity开发Http post请求

[复制链接]
发表于 2022-12-13 15:03 | 显示全部楼层 |阅读模式
public void LuaPost(string url, Action<object,object,object> callback, string fields = null, bool isEncodFields = true, string header = null, int timeout = 5){    StartCoroutine(_Post(url, delegate(long code, HttpHelperRequests requests, HttpHelperResponses rsponse)    {        callback?.Invoke(code, requests, rsponse);    }, fields, isEncodFields, header, timeout));}IEnumerator _Post(string url, HttpHelperPostGetCallbacks callback, string fields, bool isEncodFields, string header, int timeout){    using (UnityWebRequest webRequest = UnityWebRequest.Post(url, fields))    {        webRequest.timeout = timeout;        //设置请求头  根据实际需求来        webRequest.SetRequestHeader("Authorization", "");        //处理请求头设置        if (!string.IsNullOrEmpty(header))        {            JObject json = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(header);            if (json != null)            {                foreach (KeyValuePair<string, JToken> item in json)                {                    webRequest.SetRequestHeader(item.Key, item.Value.Value<string>());                }             }        }                //不自动encode        if (!string.IsNullOrEmpty(fields) && !isEncodFields)        {            byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(fields);            if (bodyRaw != null)                webRequest.uploadHandler = new UploadHandlerRaw(bodyRaw);            }        //开始与远程服务器通信        //等待通行完成        yield return webRequest.SendWebRequest();        //组装请求信息        HttpHelperRequests requests = new HttpHelperRequests();        requests.url = url;        requests.fileds = fields;        requests.headers = header;        //组装返回信息        HttpHelperResponses responses = new HttpHelperResponses();        responses.code = webRequest.responseCode;        responses.message = webRequest.error;        responses.headers = webRequest.GetResponseHeaders();        responses.text = webRequest.downloadHandler.text;        responses.bytes = webRequest.downloadHandler.data;        //调用委托        callback?.Invoke(webRequest.responseCode, requests, responses);        //结束 处理占用资源        //尽快停止UnityWebRequest        webRequest.Abort();        //默认值是true,调用该方法不需要设置Dispose(),Unity就会自动在完成后调用Dispose()释放资源。        webRequest.disposeDownloadHandlerOnDispose = true;        //不再使用此UnityWebRequest,并应清理它正在使用的任何资源        webRequest.Dispose();    }}<hr>
注:请求体不使用encode,重新赋值webRequest.uploadHandler即可。有的服务器计算sing时可能用非encode的串计算
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-28 08:59 , Processed in 0.089961 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表