本篇实现在Unity中发送Http请求。
讲解Get,Post,用于在Unity中进行数据对接。
一、Get
IEnumerator Get()
{
string url = "";//链接
UnityWebRequest request = UnityWebRequest.Get(url);//创建UnityWebRequest实例并设置请求方式为Get
yield return request.SendWebRequest();//等待响应后再运行
if (request.isNetworkError || request.isHttpError)
{
//这里做响应失败的逻辑
}
else
{
//这里做响应成功的逻辑
}
}
二、用Post传输json
IEnumerator Post()
{
UnityWebRequest sendrequest = new UnityWebRequest(url,"POST");
//编写Json文件,这里用字符串转换
string Sessagejson = "{" +
"\"" + "messages" + "\"" + ":" + "[" +
"{" +
"\"" + "role" + "\"" + ":" + "\"" + "user" + "\"" + "," +
"\"" + "content" + "\"" + ":" + "\"" + inputField.text + "\"" +
"}" +
"]" +
"}";
byte[] SendJson = new UTF8Encoding().GetBytes(Sessagejson);//将字符串内容转换为字节数组
sendrequest.uploadHandler = new UploadHandlerRaw(SendJson);//设置上传处理器
sendrequest.downloadHandler = new DownloadHandlerBuffer();//设置下载处理器
sendrequest.SetRequestHeader("Content-Type", "application/json");//设置请求头
yield return sendrequest.SendWebRequest();//发送并等待响应后再继续
if (sendrequest.result != UnityWebRequest.Result.ConnectionError && sendrequest.result != UnityWebRequest.Result.ProtocolError)
{
//这里使用正则表达式进行解析json文件
string pattern2 = "\"result\":\"(.*?)\"";//result表示在json文本中找到result以及他的内容
Match match2 = Regex.Match(sendrequest.downloadHandler.text, pattern2);//在返回的json内容中查找
Debug.log(match2.Groups[1].Value);//将查找到的内容输出
}
else
{
Debug.LogError(sendrequest.error);
}
//最后释放资源
sendrequest.Dispose();
}
注意这里使用的正则表达式解析json的方法只适合简单结构的json文件,如果你有更复杂的需要解析请参考我其他篇章或查找其他资料。
三、用Post传输文件
IEnumerator UploadAttachment_Api()
{
//这一部分先获取文件(因为这是在Unity导出Web后使用的,其中表格位于streamingAsset文件夹下)
//文件上传部分需要用户选择或从服务器获取,WebGL不允许访问本地文件
string fileName = "LabReport.xlsx"; // 假设文件名为LabReport.xlsx
byte[] filedata = null;
// 使用 UnityWebRequest 获取文件(假设文件位于服务器)
string fileUrl = Path.Combine(UnityEngine.Application.streamingAssetsPath, fileName);
UnityWebRequest fileRequest = UnityWebRequest.Get(fileUrl);
yield return fileRequest.SendWebRequest();
filedata = fileRequest.downloadHandler.data;
//这一部分开始发送表格文件
string url = "http://srm.imut.edu.cn/api/uploadfile"; //设置链接
WWWForm attachment_form = new WWWForm();//WWWForm是Unity提供的处理HTTP表单数据的类
attachment_form.AddField("uniqid", uniqid); // 上传参数,这里以uniqid为例
attachment_form.AddBinaryData("file", filedata, fileName);//添加文件
UnityWebRequest up_att_request = UnityWebRequest.Post(url, attachment_form);
// 设置Authorization头
up_att_request.SetRequestHeader("Authorization", accessToken);//根据实际情况填写
yield return up_att_request.SendWebRequest();
if (up_att_request.isNetworkError || up_att_request.isHttpError)
{
Debug.Log("发送失败");
}
else
{
Debug.Log("发送成功");
}
}