Unity 使用UnityWebRequest进行Get/Post请求
1、请求服务器链接
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class URL : MonoBehaviour
{
string GetURL = "http://edu.xiaotu.cn/index/Unityapi/getUserInfo";
string PostURL = "http://edu.xiaotu.cn/index/Unityapi/sendCourseInfo";
private void Start()
{
StartCoroutine(Post_Demo());
}
public IEnumerator Get_Demo()
{
UnityWebRequest webRequest = UnityWebRequest.Get(GetURL);
yield return webRequest.SendWebRequest();
while (!webRequest.isDone)
{
yield return null;
}
if (string.IsNullOrEmpty(webRequest.error))
{
var data = webRequest.downloadHandler.text;
Debug.Log(data);
Debug.Log("成功");
UserInfo sg;
sg = JsonUtility.FromJson<UserInfo>(data);
Debug.Log(sg.uid+sg.err_msg);
}
else
{
Debug.Log("失败");
}
}
public IEnumerator Post_Demo()
{
WWWForm form = new WWWForm();
form.AddField("uid", "tea10000");
form.AddField("course_id", "N700003");
form.AddField("course_duration", "121212");
form.AddField("course_score", "80");
UnityWebRequest webRequest = UnityWebRequest.Post(PostURL, form);
yield return webRequest.SendWebRequest();
if (string.IsNullOrEmpty(webRequest.error))
{
var data = webRequest.downloadHandler.text;
Debug.Log("成功:"+data); }
else
{
Debug.Log("失败");
}
}
}
public class UserInfo : Err
{
public string uid;
public string name;
public int site_id;
}
public class Err
{
public int err_no;
public string err_msg;
}
2、请求本地json文件
using LitJson;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
public class TikuTest : MonoBehaviour
{
[HideInInspector]
public Question_Info q;
private void Awake()
{
StartCoroutine(GetData());
}
IEnumerator GetData()
{
var uri = new System.Uri(Path.Combine(Application.streamingAssetsPath, "Tiku.json"));
UnityWebRequest www = UnityWebRequest.Get(uri);
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
string jsonStr = www.downloadHandler.text;
Question_Info ques = JsonMapper.ToObject<Question_Info>(jsonStr);
q.question_number = ques.question_number;
q.question_point = ques.question_point;
for (int i = 0; i < ques.question_info.Count; i++)
{
q.question_info.Add(ques.question_info[i]);
}
}
}
}
[System.Serializable]
public class Question_Info
{
public int question_number;
public float question_point;
public List<TestData> question_info;
}
[System.Serializable]
public class TestData
{
public int stide;
public string topic;
public string optionA;
public string optionB;
public string optionC;
public string optionD;
public string answer;
}
3、post上传list类型
using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class TestURL : MonoBehaviour
{
public void UploadScore_Btn0nClick()
{
if (!IsBusy)
{
IsBusy = true;
Buzhou_UserTime();
port.endTime = NowTime();
port.timeUsed = UserTime(user_time);
j = JsonUtility.ToJson(port);
Debug.Log(j);
byte[] postBytes = Encoding.Default.GetBytes(j);
StartCoroutine(End_Post(postBytes));
}
}
IEnumerator End_Post(byte[] postBytes)
{
UnityWebRequest request = new UnityWebRequest(postURL, "POST");
request.uploadHandler = new UploadHandlerRaw(postBytes);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
Debug.Log("Status Code: " + request.responseCode);
IsBusy = false;
if (request.responseCode == 200)
{
string text = request.downloadHandler.text;
Debug.Log("上传成绩成功" + text);
}
else
{
Debug.Log("上传成绩失败:" + request.responseCode);
}
}
}
[Serializable]
public class Port
{
public string username;
public long classId;
public string studentId;
public long experimentId;
public string title;
public int status;
public int score;
public int maxScore;
public string startTime;
public string endTime;
public string timeUsed;
public List<TExperimentalSteps> experimentalSteps = new List<TExperimentalSteps>();
}
[Serializable]
public class TExperimentalSteps
{
public long stepSequence;
public string stepTitle;
public string stepScore;
public string stepMaxscore;
public string stepRepeatCount;
public string stepTimeUsed;
public TExperimentalSteps(long _stepSequence, string _stepTitle, string _stepScore, string _stepMaxscore, string _stepRepeatCount, string _stepTimeUsed)
{
this.stepSequence = _stepSequence;
this.stepTitle = _stepTitle;
this.stepScore = _stepScore;
this.stepMaxscore = _stepMaxscore;
this.stepRepeatCount = _stepRepeatCount;
this.stepTimeUsed = _stepTimeUsed;
}
}
4、Put修改
public void Bianji_BtnOnClick()
{
YichangXiugai yx = new YichangXiugai();
yx.id = xinxi_id;
yx.deviceName= inputs[1].text;
yx.alarmMsg= inputs[2].text;
yx.alarmTime= inputs[4].text;
string s = JsonUtility.ToJson(yx);Debug.Log("s: "+s);
StartCoroutine(Put_Times(s));
}
IEnumerator Put_Times(string s)
{ UnityWebRequest webRequest = UnityWebRequest.Put(put_url, s);
webRequest.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
yield return webRequest.SendWebRequest();
while (!webRequest.isDone)
{
yield return null;
}
if (string.IsNullOrEmpty(webRequest.error))
{
Debug.Log("修改成功"); }
else
{
Debug.Log("失败");
}
}
5、发布Android读取StreamingAssets下json文件
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class AndroidTest : MonoBehaviour
{
public Text te;
string filePath;
void Start()
{
filePath = Path.Combine(Application.streamingAssetsPath, "config.json");
StartCoroutine(Times());
}
IEnumerator Times()
{
if (Application.platform == RuntimePlatform.Android)
{
string androidFilePath = "jar:file://" + filePath;
UnityWebRequest www = UnityWebRequest.Get(androidFilePath);
yield return www.SendWebRequest();
string jsonText = www.downloadHandler.text;
te.text = jsonText;
Item i = JsonUtility.FromJson<Item>(jsonText);
te.text = i.Name;
}
else
{
string jsonText = File.ReadAllText(filePath);
}
}
}
[System.Serializable]
public class Item
{
public string Name;
}