using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
/// <summary>
/// http请求模块,包含Get和Post请求
/// </summary>
public class HttpSvc : MonoBehaviour
{

    public static HttpSvc Instance;

    public string token;


    private void Awake()
    {
        InitSvc();
    }
    public void InitSvc()
    {
        Instance = this;
    }

    /// <summary>
    /// Get请求,无token请求
    /// </summary>
    /// <param name="url">地址</param>
    /// <param name="myCall">服务器回调</param>
    public void HttpGetToServer(string url, Action<string> myCall)
    {
        StartCoroutine(WebRequestGetServer(url, myCall));
    }

    /// <summary>
    /// Get请求需带Token发送
    /// </summary>
    /// <param name="url"></param>
    /// <param name="myCall"></param>

    public void HttpTokenGetToServer(string url, Action<string> myCall)
    {
        StartCoroutine(ResTokenGetCallBack(url, myCall));
    }


    private IEnumerator WebRequestGetServer(string url, Action<string> myCall)
    {

        UnityWebRequest request = new UnityWebRequest(url);
        request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();

        //request.SetRequestHeader("Authorization", token);
        yield return request.SendWebRequest();

        if (request.isHttpError || request.isNetworkError)
        {
            Debug.LogError(request.error);
        }
        else
        {
            //Debug.Log(request.downloadHandler.text);
            string str = request.downloadHandler.text;
            myCall?.Invoke(str);
        }
    }

    private IEnumerator ResTokenGetCallBack(string url, Action<string> myCall)
    {

        UnityWebRequest request = new UnityWebRequest(url);
        request.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();

        request.SetRequestHeader("Authorization", token);
        yield return request.SendWebRequest();


        if (request.isHttpError || request.isNetworkError)
        {
            Debug.LogError(request.error + "\n" + request.downloadHandler.text);
        }
        else
        {
            Debug.Log(request.downloadHandler.text);
            string str = request.downloadHandler.text;
            myCall?.Invoke(str);
        }
    }




    /// <summary>
    /// Post请求 无token请求
    /// </summary>
    /// <param name="url">地址</param>
    /// <param name="postData">表单</param>
    /// <param name="myCall">返回回调</param>
    public void HttpPostServer(string url, string postData, Action<string> myCall)
    {
        StartCoroutine(WebRequestPostServer(url, postData, myCall));
    }

    /// <summary>
    /// Post请求需要带Token发送 
    /// </summary>
    /// <param name="url"></param>
    /// <param name="postData"></param>
    /// <param name="myCall"></param>
    public void HttpTokenPostServer(string url, string postData, Action<string> myCall)
    {
        StartCoroutine(ResTokenPostCallBack(url, postData, myCall));
    }

    private IEnumerator WebRequestPostServer(string url, string postData, Action<string> myCall = null)
    {
        using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
        {
            byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData);
            webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(postBytes);
            webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();

            yield return webRequest.SendWebRequest();

            if (webRequest.isHttpError || webRequest.isNetworkError)
            {
                Debug.LogError(webRequest.error);
            }
            else
            {
                //Debug.Log(webRequest.downloadHandler.text);
                string str = webRequest.downloadHandler.text;
                myCall?.Invoke(str);
            }
        }
    }

    private IEnumerator ResTokenPostCallBack(string url, string postData, Action<string> myCall)
    {

        using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
        {
            byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postData);
            webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(postBytes);
            webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
            webRequest.SetRequestHeader("Authorization", token);

            yield return webRequest.SendWebRequest();
            if (webRequest.isHttpError || webRequest.isNetworkError)
            {
                Debug.Log(webRequest.error);
            }
            else
            {
               // Debug.Log(webRequest.downloadHandler.text);
                string str = webRequest.downloadHandler.text;
                myCall?.Invoke(str);
            }
        }
    }


    /// <summary>
    /// 上传图片不
    /// </summary>
    /// <param name="tex"></param>
    /// <param name="id"></param>
    /// <param name="url"></param>
    /// <param name="imgName"></param>
    /// <param name="callBack"></param>
    public void UpLoadPic(Texture2D tex, string url, Action<string> callBack)
    {
        StartCoroutine(ResUploadPic(tex, url, callBack));
    }

    private IEnumerator ResUploadPic(Texture2D tex, string url, Action<string> callBack)
    {
        WWWForm form = new WWWForm();
        form.AddBinaryData("avatarFile", tex.EncodeToPNG());
        UnityWebRequest request = UnityWebRequest.Post(url, form);
        request.SetRequestHeader("Authorization", token);
        using (request)
        {
            yield return request.SendWebRequest();
            if (request.isHttpError || request.isNetworkError)
            {
                Debug.LogError(request.error);
            }
            else
            {
                string result = request.downloadHandler.text;
                Debug.LogError(result);
                callBack?.Invoke(result);
            }
        }
    }



    //public void GetIDUpLoadPic(Texture2D tex, string id, string url, Action<string, string> callBack)
    //{
    //    StartCoroutine(ResIDUploadPic(tex, id, url, callBack));
    //}

    //private IEnumerator ResIDUploadPic(Texture2D tex, string id, string url, Action<string, string> callBack)
    //{
    //    WWWForm form = new WWWForm();
    //    form.AddField("ss", id);
    //    form.AddBinaryData("bb", tex.EncodeToPNG());
    //    UnityWebRequest request = UnityWebRequest.Post(url, form);
    //    request.SetRequestHeader("Authorization", token);
    //    using (request)
    //    {
    //        if (request.isHttpError || request.isNetworkError)
    //        {
    //            Debug.LogError(request.error);
    //        }
    //        else
    //        {
    //            string result = request.downloadHandler.text;
    //            Debug.LogError(result);
    //            callBack?.Invoke(result, id);
    //        }
    //    }
    //}

}

            xxxxx   fromInfo = new xxxxx();
            fromInfo.category = "";
            fromInfo.type1 = "";
            fromInfo.type2 = "";
            reqData = JsonConvert.SerializeObject(fromInfo);
            HttpSvc.Instance.HttpTokenPostServer("https://t", reqData, callback);

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐