1. 程式人生 > 其它 >Unity 連線網頁伺服器 獲取資料上傳資料

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; } }