首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用统一中的UnityWebRequest从HTTP响应中获取数据

无法使用统一中的UnityWebRequest从HTTP响应中获取数据
EN

Stack Overflow用户
提问于 2018-03-30 14:23:19
回答 2查看 4.8K关注 0票数 2

嗨,团结和微软的专业人士!我正在尝试使用Microsoft文本在Unity中使用语音API,此API需要在请求头中传递的AccessToken。为了获得此令牌,我在"Ocp-Apim-Subscription-Key"头中发送了身份验证密钥,该API将返回我接下来可以使用的访问令牌,这是对在Postman中转发令牌的API的测试。

所以这是做这件事的代码,但不起作用。

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;
using System.Xml.Linq;
using UnityEngine;
using UnityEngine.Networking;

public class Test : MonoBehaviour
{
    public static readonly string accessUri = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken";
    public string accessToken;

    public void Start()
    {
        WWWForm wwwForm = new WWWForm();
        Dictionary<string, string> headers = wwwForm.headers;
        headers["Ocp-Apim-Subscription-Key"] = "a66ec1e2123784hf39f22e2dc2e760d13x";

        UnityWebRequest www = UnityWebRequest.Post(accessUri, wwwForm);
        StartCoroutine(RequestToken(www));
    }

    public IEnumerator RequestToken(UnityWebRequest www)
    {
        yield return www;
        if (www.error == null)
        {
            Debug.Log("downloadedBytes : " + www.downloadedBytes);
            Debug.Log("certificateHandler : " + www.certificateHandler);
            Debug.Log("chunkedTransfer : " + www.chunkedTransfer);
            Debug.Log("downloadHandler : " + www.downloadHandler);
            Debug.Log("downloadProgress : " + www.downloadProgress);
            Debug.Log("isDone : " + www.isDone);
            Debug.Log("isNetworkError : " + www.isNetworkError);
            Debug.Log("method : " + www.method);
            Debug.Log("redirectLimit : " + www.redirectLimit);
            Debug.Log("responseCode : " + www.responseCode);
            Debug.Log("uploadedBytes : " + www.uploadedBytes);
            Debug.Log("useHttpContinue : " + www.useHttpContinue);
        }
        else
        {
            Debug.Log("Error" + www.error);
        }
        var p = www.downloadHandler.data;
        Debug.Log("Access token: " + p);
    }
}

该代码的结果是:

我已经试过了WWW类,但这不起作用!而System.Net.Http,但统一不接受这个图书馆:/

请问有什么办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-31 12:47:01

我想你需要一份www.SendWebRequest()声明。您的代码只是声明yield return www;,而不是yield return www.SendWebRequest()

请参阅此代码示例(来自UnityEngine.Networking.UnityWebRequest.Post文档):

代码语言:javascript
复制
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class MyBehavior : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(Upload());
    }

    IEnumerator Upload()
    {
        WWWForm form = new WWWForm();
        form.AddField("myField", "myData");

        using (UnityWebRequest www = UnityWebRequest.Post("http://www.my-server.com/myform", form))
        {
            yield return www.SendWebRequest();

            if (www.isNetworkError || www.isHttpError)
            {
                Debug.Log(www.error);
            }
            else
            {
                Debug.Log("Form upload complete!");
            }
        }
    }
}

(另外,对于代码中的Access token: System.Byte[]输出消息,请注意,在调试输出时,应该使用DownloadHandler.text属性而不是DownloadHandler.data。目前,它只是打印属性的类型,而不是其实际内容。)

编辑:请注意,我是这样调试这个问题的,因为www.isDone是false,而www.downloadProgress是-1。这表明www请求从未正确发送或完成。如果这是一个错误,我认为www.isDone可能对其他地方提供的错误是正确的。

票数 3
EN

Stack Overflow用户

发布于 2018-03-31 05:12:57

尝试将这些添加到请求中。

代码语言:javascript
复制
request.Accept = @"application/json;text/xml";
request.ContentType = @"audio/wav; codec=audio/pcm; samplerate=16000";

看看它是否有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49576185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档