Unity 连接网页服务器 获取数据上传数据

1.先从服务器请求验证获取token值   最后上传数据

using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
//请求连接

//数据类型
public class Conserver
{
    public int recordType;     //类型
    public string studentIdx;    //学号
    public string courseName;  // 课程名称
    public string taskName;    //任务名称
    public int loginTimes;     //登录次数
    public int onlineDur;     //在线时长
    public byte  finishRate;  //学习完成率
    public byte score;       //分数

    public Conserver(int recordType, string studentIdx,string courseName,string taskName,int loginTimes, int onlineDur,
        byte finishRate, byte score)
    {
        this.recordType = recordType;
        this.studentIdx = studentIdx;
        this.courseName = courseName;
        this.taskName = taskName;
        this.loginTimes = loginTimes;
        this.onlineDur = onlineDur;
        this.finishRate = finishRate;
        this.score = score;
    }
}
//解析json类
//定义的类型一定要跟接收到的数据类型保持一致,否则会一直出不来
public class modelTest
{
    public int result;
    public Data data;
}
public class Data
{
    public Examsk[]exams;
    public int total;  //个数
}
public class Examsk
{
    public string className;  //班级
    public string courseName;  //课程
    public string endTime;  //结束时间
    public int id;    //id
    public string name;   //考试名称
    public string startTime;  //开始时间
    public int taskIndex; //任务id
}

public class Connect_Server : MonoBehaviour
{
    public string idd;  //保存的token值
    public InputField field_xuehao;
    public InputField field_mima;
    public InputField field_kecheng;
    public Button btn_login;
    [NonSerialized]
    public int type;    //什么类型  0学习  1 训练 2 考试
    [NonSerialized]
    public string ipp;  //IP地址
    public GameObject ipObject;  //IP地址界面
    public InputField field_ip;
    public Button btn_jinru;
    public static Connect_Server instance;
    public GameObject tanchaungObj;

    public List<string> listkeceng = new List<string>();  //课程
    public List<string> listname = new List<string>();  //考核名称
    public List<int> listTaskIndex = new List<int>();   //任务几
    public static int numberTask;  //任务个数
    public  int RW;
    public string kechengmingcheng;

    //清空列表
    public void Clear_List()
    {
        listkeceng.Clear();
        listname.Clear();
        listTaskIndex.Clear();
    }

    public void BaoCunIpp()
    {
        PlayerPrefs.SetString("IPIP", field_ip.text);
    }
    private void Awake()
    {

        instance = this;
        if (PlayerPrefs.GetString("IPIP")!=null)
        {
            field_ip.text = PlayerPrefs.GetString("IPIP");
        }
        else
        {
           
        }
        
    }
    private void Start()
    {
        //登录按钮
        btn_login.onClick.AddListener(delegate {
            if (field_xuehao.text !=""&& field_mima.text !="")
            {
                StartCoroutine(GetAccessToken(field_xuehao.text, field_mima.text));
            }
        });
        
        btn_jinru.onClick.AddListener(delegate {
            if (field_ip.text !="")
            {
                ipp = field_ip.text;
                ipObject.SetActive(false);
                BaoCunIpp();
            }
        });
    }
    //上传数据
    public void Upload_Data(int type,string xuehao,string kecheng,string renwu,int cishu,byte wancenglv,byte soce)
    {
        sendMessage(new Conserver(type, xuehao, kecheng, renwu, cishu, (int)Time.realtimeSinceStartup, wancenglv, soce));
    }
    //上传学习完成率数据
    // 调用 Connect_Server.instance.UpLoad_Dataxuexi();
    public void UpLoad_Dataxuexi()
    {
        Connect_Server.instance.Upload_Data(Connect_Server.instance.type, Connect_Server.instance.field_xuehao.text,
         Connect_Server.instance.listkeceng[0], "考试", 1, 100, 0);
        Connect_Server.instance.Clear_List();
    }
    public void Update()
    {
        if (Input.GetKeyDown (KeyCode.Space ))
        {           
            //Connect_Server.instance.Get_BicAuth();
            //GetPage();
        }
    }

    //post 请求账号密码  获取token值  ,保存使用
    IEnumerator GetAccessToken(string xuehao,string mima)
    {
        
        string url = "http://"+ipp+":8080/auth/login/student";
        //Debug.Log(url);
        WWWForm form = new WWWForm();
        form.AddField("studentIdx", xuehao);
        form.AddField("password", mima);
        //string form = Convert.ToBase64String(Encoding.Default.GetBytes("20210101:123456"));
        UnityWebRequest www = UnityWebRequest.Post(url, form);
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            //Debug.Log("Form upload complete!");
            JsonData json = JsonMapper.ToObject(www.downloadHandler.text);
            Debug.Log(www.downloadHandler.text);
            //获取服务器返回的数据 解析判断
            if (json["result"].ToString()!="0")
            {
                field_xuehao.text = "";
                field_mima.text = "";
                field_kecheng.text = "";
                tanchaungObj.SetActive(true);
              
            }
            else
            {
                //Debug.Log(www.downloadHandler.text);
                //idd就是解析出来的token值
                idd = json["data"]["token"].ToString();
                //Debug.Log(idd);
                GameManager.instance.login_obj.SetActive(false);
               
            }
           
        }          
    }

    public void GuanBITanChuang()
    {
        tanchaungObj.SetActive(false);
    }
    // 直接get请求  
    public void Get_BicAuth()
    {
        string url = "http://"+ipp+":8080/exam?page=1&limit=10";
        using (var httpClient = new HttpClient())
        {
            var response = httpClient.GetAsync(url).Result;
            var data = response.Content.ReadAsStringAsync().Result;
            Debug.Log(data);
        }      
    }
    //GET请求服务器 带Bearer认证  还有token令牌
    public void GetPage()
    {
        HttpWebRequest request = null;
        string requestUrl = "http://" + ipp + ":8080/exam?page=1&limit=10";
        // 准备请求...
        try
        {
            // 设置参数
            CookieContainer objCookieContainer = null;
            request = (HttpWebRequest)WebRequest.Create(requestUrl);
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = "GET"; //请求方式GET或POST
            //数据格式是JSON
            request.ContentType = "application/json";
            //认证方式 bearer   idd 是令牌 token值
            request.Headers.Add("Authorization", "Bearer " + idd);

            string strResponse = "";
            using (HttpWebResponse res = (HttpWebResponse)request.GetResponse())
            {
                objCookieContainer = request.CookieContainer;
                using (Stream resStream = res.GetResponseStream())
                {
                    using (StreamReader srs = new StreamReader(resStream, Encoding.UTF8))//.UTF8))
                    {
                        strResponse = srs.ReadToEnd();
                        Debug.Log(strResponse);
                        modelTest obj = JsonMapper.ToObject<modelTest>(strResponse);
                        numberTask = obj.data.total;
                       
                        for (int i = 0; i < obj.data.total; i++)
                        {
                            //保存从服务器获取的数据,等会显现出来
                            listname.Add(obj.data.exams[i].name.ToString());
                            listkeceng.Add(obj.data.exams[i].courseName.ToString());
                            listTaskIndex.Add(obj.data.exams[i].taskIndex);
                          
                        }
                    }
                }

            }         
        }
        catch (Exception e)
        {
            Debug.Log(e);
        }

    }
    //带HTTP安全协议   Bearer验证的post请求方法  上传数据
    public string sendMessage( Conserver student)
    {
        string strUrl = "http://"+ipp+":8080/record";
        try
        {
            CookieContainer objCookieContainer = null;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
            request.Method = "Post";
            request.ContentType = "application/json";
            // 设置Http Bearer认证的请求头
            request.Headers.Add("Authorization", "Bearer " + idd);
            request.Referer = strUrl;           
            Debug.Log(strUrl);
            if (objCookieContainer == null)
                objCookieContainer = new CookieContainer();

            request.CookieContainer = objCookieContainer;
            Debug.Log(objCookieContainer.ToString());
            
            //传输参数格式转换

            var data = JsonUtility.ToJson(student);

           // request.ContentLength = Encoding.UTF8.GetByteCount(data);
            byte[] byteData = Encoding.UTF8.GetBytes(data);
            request.ContentLength = byteData.Length;
            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(byteData, 0, byteData.Length);
                // reqStream.Close();
            }

            string strResponse = "";
            using (HttpWebResponse res = (HttpWebResponse)request.GetResponse())
            {
                objCookieContainer = request.CookieContainer;               
                using (Stream resStream = res.GetResponseStream())
                {
                    using (StreamReader sr = new StreamReader(resStream, Encoding.UTF8))//.UTF8))
                    {
                        strResponse = sr.ReadToEnd();
                        Debug.Log(strResponse);
                    }
                }
                // res.Close();
            }
            return strResponse;
        }
        catch (Exception e)
        {
            Debug.Log(e);
        }
        return null;
    }
}

 

posted @ 2021-06-22 17:34  剑起苍穹  阅读(1012)  评论(5编辑  收藏  举报
/*鼠标点击特效*/