LiteralliJeff 发表于 2022-12-13 15:03

Unity开发Http post请求

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的串计算
页: [1]
查看完整版本: Unity开发Http post请求