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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器