【问题标题】:Unity: https post and get requests using JSONObjUnity:https 使用 JSONObj 发布和获取请求
【发布时间】:2015-04-18 02:36:25
【问题描述】:

我是。我正在统一为 android 设备制作 2d 游戏,但我很难理解所有 WWW 和 http 表单。

我基本上需要做的是向 https url 发布请求并使用凭据(用户名和密码)获取访问令牌,我必须使用 JSON 对象。

我需要更详细的方式:

1.向服务器创建 2 个请求以获取额外资产:为了接收访问令牌,我需要创建一个 HTTP POST 请求到包含 JSON 对象的特定 url,其中包含两个元素 - 'username' 和 'password' 。

2.创建一个对特定 url 'auth' 标头的 HTTP GET 请求,并使用在第一个请求中获取的访问令牌。响应包含一个带有 5 个附加艺术资产 URL 的 JSON 对象。

3.那么我需要将这5个包含图像的网址随机放入我的游戏中。

我知道如何将预制件添加到游戏中,我只是找不到一个可以理解的指南来完成这个过程。我从资产商店下载了 JSON 对象

无需编写代码,即使它会更清晰易懂,我只需要有关如何获得结果的指南。

非常感谢我感谢每一个帮助!

【问题讨论】:

    标签: c# android json https unity3d


    【解决方案1】:

    (已弃用): WWWWWWForm 应该足以满足您的所有需求。

    (更新版本): 我会按照@LabGecko 的建议更新我的答案。

    要将网络请求发送到服务器,您应该使用UnityWebRequest。这就是我发送 Post 请求的方式(传递一些接受字符串作为 callback 的参数的函数来处理结果)。

    //callback is used to handle server response
    private IEnumerator SendPostRequest(string url, List<IMultipartFormSection> data, 
    Action<string> callback, string _token = null)
    {
        using (UnityWebRequest www = UnityWebRequest.Post(url, data))
        {
            //Set auth token if available
            if (!string.IsNullOrEmpty(_token))
                www.SetRequestHeader("authorization", string.Format("Bearer {0}", _token));
    
            www.SendWebRequest();
    
            while (!www.isDone)
            {
                yield return false;
            }
    
            if (!string.IsNullOrEmpty(www.error))
            {
                Debug.Log(www.error);
            }
    
            if (www.isDone)
            {
                callback(www.downloadHandler.text);
            }
        }
    }
    

    获取请求如下所示:

    private IEnumerator SendGetRequest(string url, Action<string> callback, string _token = null)
    {
        using (UnityWebRequest www = UnityWebRequest.Get(url))
        {
            if (!string.IsNullOrEmpty(_token))
                www.SetRequestHeader("authorization", string.Format("Bearer {0}", _token));
    
            www.SendWebRequest();
    
            while (!www.isDone)
            {
                yield return false;
            }
    
            if (!string.IsNullOrEmpty(www.error))
            {
                Debug.Log(www.error);
            }
    
            if (www.isDone)
            {
                callback(www.downloadHandler.text);
            }
        }
    }
    

    收到响应后,您可以使用 JSONUtility 处理它的 JSON 部分。

    【讨论】:

    • 此链接已损坏,此答案的部分内容已弃用。有没有办法让这个问题不再出现在搜索结果中?在 URL 和 JSON 上搜索时,它仍然排名靠前。
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2019-02-08
    相关资源
    最近更新 更多