[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

与 UnityWebRequest 轻松进行 HTTP (POST) 通信

感谢您的辛勤工作。
我是系统开发室的松山。

这次,我将写一下使用UnitWebRequest进行HTTP(POST)通信。
我感觉已经来不及了,但我只是通过www实现了通信,所以我再说一遍^^;

做什么

・与 UnitWebRequst 进行 HTTP (POST) 通信
・请求和响应采用 JSON 格式
・简单,假设将创建多个通信 API
*使用 Unity 2019.3.5f1 创建

JSON

首先,关于JSON,我们将使用Unity的JsonUtility来实现它。
JsonUtility是Unity提供的Json解析器,
可以轻松序列化Serialized类和结构体。
虽然存在不支持Dictionary类型等限制,但在性能方面似乎比其他Json解析器要好。
序列化为Json格式

UnityWeb请求

这是主要的通信过程。
您可以使用 UnityWebRequest 处理 HTTP 请求和响应。
UnityWeb请求

这个过程本身非常简单。
生成POST格式的UnityWebRequest并设置json格式的请求参数。

    // 设置 HTTP (POST) 信息 var req = new UnityWebRequest(url, "POST"); req.uploadHandler = (UploadHandler)new UploadHandlerRaw(postData); req.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer(); “内容类型”,“application/json”);

需要注意的一件事是参数不能作为字符串传递,因此您应该将它们转换为字节数组。

    // 将请求对象转换为 JSON(字节数组) string reqJson = JsonUtility.ToJson(request); byte[] postData = System.Text.Encoding.UTF8.GetBytes(reqJson);

准备好后我会提交请求。

    // API通信(等待完成)yield return req.SendWebRequest();

由于 isNetworkError 和 isHttpError 均为 false,因此判断通信结果成功。
响应以 Json 格式(文本)存储在 downloadHandler 中。

    // 通讯结果 if (req.isNetworkError || req.isHttpError) // 失败 { Debug.Log("网络错误:" + req.error); } else // 成功 { Debug.Log("成功:" + req .downloadHandler.text); }

API控制

创建 API 类的图像,该类使用上述通信处理作为基类来定义每个 API 的请求和响应。
具体是这样的吗?
创建具有可序列化属性的请求和响应结构并定义参数。
通信时URL的公共部分是在基类端定义的,所以在最后定义API名称。

使用 System; 使用 System.Collections.Generic 命名空间 Api { ///<summary> /// API 示例 B ///</summary>公共类 SampleB : Web.ApiBase { public const string Name = "Test/SampleB"; ///<summary> /// 请求参数 ///</summary> [可序列化] public struct Request { public string userId public List;<int>值; } 公共请求请求; ///<summary> /// 响应参数 ///</summary> [可序列化] public struct Response { public int count;<int>值; } 公共响应 } }

如何使用

首先,生成上述的API类。

    private Api.SampleB apiB; private Web.ApiBase.Result result; private void Start() { // 通信类生成 apiB = new Api.SampleB(); // API 通信 sendApiB();

指定API名称后,设置要传递给请求结构的值。
它在 Send() 方法中序列化为 JSON 格式,并使用 UnityWebRequest 通过 HTTP (POST) 进行通信。
在回调中接收通信完成并将其反序列化为响应结构。
本来,我会根据响应的内容编写处理,但由于这是一个示例,所以我只是将其输出到控制台。

    ///<summary> /// API 示例 B 通信 ///</summary> private void sendApiB() { // 设置端点 apiB.EndPoint = Api.SampleB.Name; // 设置请求参数 apiB.request.userId = "beyondB";<int> () { 1, 10, 100, 1000 }; // 通信 apiB.Send<Api.SampleB.Request> (ref apiB.request, result => { // 结果 if (result.isSucceeded) // Success { // 展开响应 apiB.response = apiB.Response<Api.SampleB.Response> (); // 检查内容 Debug.Log("SampleB Succeed!!"); Log (" val : " + v); } } else // 失败 { Debug.Log("SampleB 失败 : " + result.error) }

概括

这样,我就能够非常简单地编写HTTP通信处理了。
我认为暂时可以经受住实际使用。
由于它是一个通信过程,如果没有服务器端实现,它就无法工作,但为了以防万一,我会将示例代码上传到 GitHub 上。
统一示例

由于示例的基类没有继承MonoBehaviour,因此无法直接使用协程。
请将此作为参考。
在不继承 MonoBehavior 的类中使用协程

最后

我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

好了,现在就这些了。

如果您觉得这篇文章有帮助,请点赞!
3
加载中...
3 票,平均:1.00 / 13
13,192
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

松山贤章

他长期在一家游戏开发公司工作,从事程序和项目管理工作。
2019年加入超越株式会社。
在横滨办事处工作。 主要负责服务器端开发工作的项目管理。
(有时编程)我的爱好是骑自行车(公路赛车)和观看赛马。