Unity用UnityWebRequest和 BestHttp的GET和POST表单提交,与php交互

本文详细介绍了Unity 2021中使用UnityWebRequest进行GET和POST请求,以及通过BestHttp插件与PHP交互下载图片的示例,展示了向服务器获取GM配置和数据处理的过程。

目录

在unity2021中,WWW的资源加载方式过时了,新的方法为UnityWebRequest

 BestHttp的Get方式和Post方式

 部分API


在unity2021中,WWW的资源加载方式过时了,新的方法为UnityWebRequest

实际开发过程中,游戏APP通常在连接游戏服务器之前先从web服务器获取GM配置的相关信息,这里模拟服务器和前端的简单交互,用Unity的UnityWebRequest的GET和POST两种方式提交表单,向后端请求数据,后端返回JSON数据,前端根据返回数据执行相关逻辑。

Demo的内容:

  1. 用UnityWebRequest的GET和POST表单提交,与php(返回JSON)交互
  2. 从web服务器下载图片替换本地显示的图片
  3. 用BestHttp插件的GET和POST表单提交,与php(返回JSON)交互

 演示图片:

 

 演示视频:

UnityWebRequest下载图片demo

 直接上代码,都是老司机,demo仅供参考玩

PHP脚本:GetInfo.php

<?php

// 如果是GET请求
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    // Get访问。。。。
    if ($_GET["action"]=="login")
    {
        if ($_GET['user'] == 'admin' && $_GET['pwd'] == 'admin' && $_GET['time']>202205312146151616)
        {
            exit(json_encode([
                'code' => '200',
                'msg' => 'GET_success',
                'num' => 71, 
                'data' => [
                    'aa' => true, 
                    'bb' => false, 
                    'cc' => 15, 
                    'dd' => 3.1415, 
                    'ee' => [1,2,3], 
                ]
            ]));
            // var_dump("登录成功");
        }  else {
            exit(json_encode([
                'code' => '200',
                'msg' => 'user does not exist',
                'data' => []
            ]));
        }
    } 
    else if ($_GET["action"]=="get_picture_num")
    {
        exit(json_encode([
                'code' => '200',
                'msg' => 'GET_success',
                'num' => 71, 
            ]));
    }
    else
    {
       exit(json_encode([
            'code' => '200',
            'msg' => 'GET 请求',
            'data' => []
        ])); 
    }
    
}


// 如果是POST请求
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // POST访问。。。。
    if ($_POST["action"]=="login")
    {
        if ($_POST['user'] == 'admin' && $_POST['pwd'] == 'admin' && $_POST['time']>202205312146151616)
        {
            exit(json_encode([
                'code' => '200',
                'msg' => 'POST_success',
                'num' => 71, 
                
Unity中使用`UnityWebRequest.Get`方法传递参数时,通常需要将参数附加到URL的查询字符串中。Unity的`UnityWebRequest`类本身并不直接支持以结构化方式传递参数(如POST请求中的表单数据),因此需要手动构建带有参数的URL。 ### 使用UnityWebRequest.Get传递参数 可以通过字符串拼接的方式将参数添加到URL中。例如,若要向服务器发送一个包含`username``id`参数的GET请求,可以按如下方式构造URL: ```csharp string baseUrl = "https://example.com/api/data"; string username = "testUser"; int id = 123; // 构建带参数的URL string url = baseUrl + "?username=" + username + "&id=" + id; // 创建UnityWebRequest对象 UnityWebRequest request = UnityWebRequest.Get(url); // 发送请求 yield return request.SendWebRequest(); // 检查请求是否成功 if (request.result == UnityWebRequest.Result.Success) { Debug.Log("Response: " + request.downloadHandler.text); } else { Debug.LogError("Error: " + request.error); } ``` ### 注意事项 - **URL编码**:如果参数值可能包含特殊字符(如空格、中文等),应使用`UnityWebRequest.EscapeURL`方法对参数进行编码,以确保URL格式正确。例如: ```csharp string encodedUsername = UnityWebRequest.EscapeURL("用户 test"); string url = "https://example.com/api/data?username=" + encodedUsername; ``` - **查询参数长度限制**:GET请求的参数是附加在URL后面的,而URL的长度是有限制的(通常为2KB左右),因此不适合传递大量数据[^1]。 - **安全性**:GET请求的参数暴露在URL中,不适合用于传输敏感信息。 - **缓存书签**:由于GET请求的参数在URL中,因此可以被缓存或保存为书签,这在某些场景下可能是有益的。 ### 示例:使用UnityWebRequest.Get获取JSON数据 如果服务器返回的是JSON格式的数据,则可以通过`DownloadHandlerBuffer`获取响应内容,并进一步解析: ```csharp IEnumerator GetJsonData() { string url = "https://example.com/api/data?format=json"; using (UnityWebRequest request = UnityWebRequest.Get(url)) { yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { string jsonResponse = request.downloadHandler.text; Debug.Log("Received JSON: " + jsonResponse); // 可以在此处使用JsonUtility或第三方JSON库解析响应 } else { Debug.LogError("Failed to fetch JSON: " + request.error); } } } ``` ### 总结 在Unity中使用`UnityWebRequest.Get`时,参数需要通过URL的查询字符串传递。这种方式简单直接,但需要注意URL长度限制、参数编码以及安全性问题。对于复杂或敏感的数据交互,建议使用`UnityWebRequest.Post`方法[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小道-李道玄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值