Http请求
http可以用www和UnityWebRequest,但是www已经被弃用,建议使用UnityWebRequest;
直接上代码
UnityWebRequest uwr = UnityWebRequest.Get("www.baidu.com"); //创建UnityWebRequest对象
uwr.timeout = 20;
yield return uwr.SendWebRequest();
if (uwr.isHttpError || uwr.isNetworkError)
{
print(uwr.error); //打印错误原因
}
else //请求成功
{
print("Get:请求成功");
}
Gzip解压缩
由于我们的后台接口用了gzip压缩,所以没办法直接解析数据,需要先解压缩,找了几种压缩方式都不太好用,最后在用了框架中的方法,
库:using System.IO.Compression
string str = "";//声明空字符串用来接收解压缩后的数据
if (uwr.GetResponseHeader("Content-Encoding") != null && uwr.GetResponseHeader("Content-Encoding").ToLower().Equals("gzip"))
{//判断是否被gzip压缩,是做解压缩操作,否直接接受text数据
Stream ff = null;
ff = new GZipStream(new MemoryStream(uwr.downloadHandler.data), CompressionMode.Decompress);
using (StreamReader reader = new StreamReader(ff, Encoding.UTF8))
{
str = reader.ReadToEnd();
}
print("Get:结果");
}
else
{
print("else");
str = uwr.downloadHandler.text;
}
print(str);//输出解压缩后的字符串
Json解析
json解析时候遇到了坑,不知道什么原因直通过键值和数组index找到目标数据一直报错,后来我逐层解析才拿到数据,所以就数组和字典不要混合取值,多接几次数据就可以了。
JsonData data = JsonMapper.ToObject(content);
JsonData list = data["key1"]["key2"];
print("list=" + list.Count);
JsonData dic = list[0];
print("dic=" + dic);
JsonData listData = dic["key3"];
print("listData=" + listData.Count);