说明
Unity中UnityWebRequest和WWW都可以实现HTTP请求,这里使用的是UnityWebRequest发送Post请求。
UnityAPI-UnityWebRequest
架构
UnityWebRequest 生态系统将 HTTP 事务分解为三个不同的操作:
- 向服务器提供数据
- 从服务器接收数据
- HTTP 流量控制(例如,重定向和错误处理)
为了给高级用户提供更好的界面,这些操作均由自己的对象进行管理:
- UploadHandler 对象处理数据到服务器的传输
- DownloadHandler 对象处理从服务器接收的数据的接收、缓冲和后处理
- UnityWebRequest 对象管理其他两个对象,还处理 HTTP 流量控制。此对象是定义自定义标头和 URL 的位置,也是存储错误和重定向信息的位置。
对于任何 HTTP 事务,正常的代码流程如下:
- 创建 Web 请求对象
- 配置 Web 请求对象
- 设置自定义标头
- 设置 HTTP 动词(例如 GET、POST 和 HEAD - 除 Android 之外的所有平台都允许使用自定义动词)
- 设置 URL *(可选)创建上传处理程序并将其附加到 Web 请求
- 提供要上传的数据
- 提供要上传的 HTTP 表单 *(可选)创建下载处理程序并将其附加到 Web 请求 - 发送 Web 请求
- 如果在协程中,可获得 Send() 调用的结果以等待请求完成 (可选)读取从下载处理程序接收的数据 (可选)从 UnityWebRequest 对象中读取错误信息、HTTP 状态码和响应标头
步骤一:发送post请求
/*
url:请求地址
*/
public void Geturl()
{
StartCoroutine(PostRequest(url));
}
IEnumerator PostRequest(string url)
{
//所提交的表单
WWWForm form = new WWWForm();
//加上请求参数,如参数名“Content-Type",内容”application/json“
form.AddField("Content-Type", "application/json");
//发送Post请求
using (UnityWebRequest webRequest = UnityWebRequest.Post(url, form))
{
yield return webRequest.SendWebRequest();
if (!string.IsNullOrEmpty(webRequest.error))
{
Debug.LogError(webRequest.error);
}
else
{
//获得返回数据
Debug.Log(webRequest.downloadHandler.text);
}
}
}
步骤二:处理得到的Json数据
在上一步中,我们获得了返回数据webRequest.downloadHandler.text,现在处理返回的内容得到想要的数据
得到类
利用Json在线解析网站,将webRequest.downloadHandler.text生成实体类
比如JSON数据为
{
"name":"so json 在线工具",
"url":"https://www.sojson.com",
"address":{
"city":"北京",
"country":"中国"
},
"arrayBrowser":[{
"name":"Google",
"url":"http://www.google.com"
},
{
"name":"Baidu",
"url":"http://www.baidu.com"
},
{
"name":"SoSo",
"url":"http://www.SoSo.com"
}]
}
生成的实体类为
public class Address
{
public string city { get; set; }
public string country { get; set; }
}
public class ArrayBrowser
{
public string name { get; set; }
public string url { get; set; }
}
public class Root
{
public string name { get; set; }
public string url { get; set; }
public Address address { get; set; }
public List<ArrayBrowser> arrayBrowser { get; set; }
}
将JSON内容赋值给对象
这里使用LitJSON插件,将Json数据赋值给对象,从而得到所需数据。
Root root = JsonMapper.ToObject<Root>(webRequest.downloadHandler.text);
string name = root.name;//"so json 在线工具"
string city = root.address.city; //"北京"
参考文档:
Unity实现HTTP请求
UnityWebRequest
Unity读取和解析JSON文件(1)-JSON和对象的转换
Unity 读取解析Json 文件