UnityWebRequest 通过Post方式发起网络请求
【摘要】
以实际工作中与后端人员对接接口为例,下图为后端人员提供的需要对接的某个接口:
可见数据结构中包含了4个string类型的字段,首先定义数据结构,注意字段名和字段类型需要保持一致,否则导致无法正确解析数据。
/// <summary>
/// 确认过闸
/// </summary...
以实际工作中与后端人员对接接口为例,下图为后端人员提供的需要对接的某个接口:
可见数据结构中包含了4个string类型的字段,首先定义数据结构,注意字段名和字段类型需要保持一致,否则导致无法正确解析数据。
/// <summary>
/// 确认过闸
/// </summary>
[Serializable]
public class Affirm
{
public string id;
public string inId;
public string time;
public string batchCode;
}
Serializable特性表示该类可序列化,否则无法进行序列化
设置请求头header的Content-Type,它有四种类型:
application/x-www-form-urlencoded(默认)
application/xml
application/json
multipart/form-data
由于该接口所传的参数为json格式,所以需要设置为application/json,否则导致报错:HTTP/1.1 415 Unsupported Media Type,下面封装发起网络请求的携程函数:
public IEnumerator SendWebRequest()
{
//接口地址
string url = "http://**.**.***.***:****/********/*****";
//post数据 通过序列化获得字符串
string postData = JsonMapper.ToJson(new Affirm());
//Post网络请求
using (UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST))
{
byte[] postBytes = Encoding.UTF8.GetBytes(postData);
request.uploadHandler = new UploadHandlerRaw(postBytes);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (!request.isNetworkError && !request.isHttpError)
{
Debug.Log(response);
}
else
{
Debug.LogError($"发起网络请求失败: 确认过闸接口 -{request.error}");
}
}
}
当后端返回数据时,通过反序列化得到我们所需的Response类
[Serializable]
public class AffirmResponse
{
public string msg;
public int code;
public bool hit;
public List<Affirm> data;
}
public IEnumerator SendWebRequest()
{
//接口地址
string url = "http://**.**.***.***:****/********/*****";
//post数据 通过序列化获得字符串
string postData = JsonMapper.ToJson(new Affirm());
//Post网络请求
using (UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST))
{
byte[] postBytes = Encoding.UTF8.GetBytes(postData);
request.uploadHandler = new UploadHandlerRaw(postBytes);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (!request.isNetworkError && !request.isHttpError)
{
//反序列化
var response = JsonMapper.ToObject<AffirmResponse>(request.downloadHandler.text);
Debug.Log($"Code:{response.code} Msg:{response.msg} Hit:{response.hit}");
}
else
{
Debug.LogError($"发起网络请求失败: 确认过闸接口 -{request.error}");
}
}
}
文章来源: coderz.blog.csdn.net,作者:CoderZ1010,版权归原作者所有,如需转载,请联系作者。
原文链接:coderz.blog.csdn.net/article/details/120865914
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)