首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未通过UnityWebRequest传递授权头

未通过UnityWebRequest传递授权头
EN

Stack Overflow用户
提问于 2017-09-15 07:49:40
回答 2查看 7.1K关注 0票数 2

我正在尝试将一个OAuth2持有者令牌和一个Post请求一起传递给我的服务器(使用Google Apps脚本执行API)。无论我如何尝试设置授权令牌,我都会收到401未授权错误。我确信我不知何故设置错了,但我一直无法找出哪里出了问题。

下面是我当前的代码。

代码语言:javascript
复制
private static UnityWebRequest createRequest(string functionName, List<string> parameters)
{
    PostData data = new PostData();
    data.Add("function", functionName);
    data.Add("parameters", string.Join(",", parameters.ToArray()));
    data.Add("devMode", "true"); // TODO: remove before launch

    Debug.Log(data.toJsonString());
    UnityWebRequest request = new UnityWebRequest(
            "https://script.googleapis.com/v1/scripts/" + SERVER_SCRIPT_ID + ":run",
            UnityWebRequest.kHttpVerbPOST);
    UploadHandlerRaw uploadHandler = new UploadHandlerRaw(data.toJsonBytes());
    request.uploadHandler = uploadHandler;
    request.downloadHandler = new DownloadHandlerBuffer();
    request.SetRequestHeader("Content-Type", "application/json; charset=utf-8");
    request.SetRequestHeader("Authorization", "Bearer " + DriveAPI.getInstance().getAuthToken());

    yield return request.Send();
    Debug.Log(request.downloadHandler.text);
}

[Serializable]
private class PostData : Dictionary<string, string>
{
    public byte[] toJsonBytes()
    {
        return Encoding.ASCII.GetBytes(toJsonString());
    }
    public string toJsonString()
    {
        string result = "{";
        foreach (string key in this.Keys)
        {
            string value;
            TryGetValue(key, out value);
            result += "\"" + key + "\":\"" + value + "\",";
        }
        result = result.Substring(0, result.Length - 1) + "}";
        return result;
    }
}

我尝试过在实际的数据对象中设置头文件,但也没有成功。

EN

回答 2

Stack Overflow用户

发布于 2017-09-15 23:19:30

事实证明我的代码运行得很好。

来自Apps脚本的错误消息具有误导性,因为正在发送Auth令牌。我能够通过从我的脚本(服务于执行API端点)生成一个auth令牌并在我的应用程序中硬编码该令牌来测试正确性。这样做的结果是请求成功。

我已经检查了脚本中使用的云项目和我的应用程序中使用的云项目是相同的,但仍然收到错误,但这是另一个问题的问题:)。

票数 2
EN

Stack Overflow用户

发布于 2017-09-15 15:13:26

尝试编码为UTF8,将UploadHandleRaw更改为UploadHandle,并将request设置为single Post:

代码语言:javascript
复制
private static UnityWebRequest createRequest(string functionName, List<string> parameters)
{
    PostData data = new PostData();
    data.Add("function", functionName);
    data.Add("parameters", string.Join(",", parameters.ToArray()));
    data.Add("devMode", "true"); // TODO: remove before launch

    Debug.Log(data.toJsonString());
    UnityWebRequest request = new UnityWebRequest("https://script.googleapis.com/v1/scripts/" + SERVER_SCRIPT_ID + ":run", "POST");
    UploadHandler uploadHandler =(UploadHandler) new UploadHandlerRaw(Encoding.UTF8.GetBytes(data.toJsonString()));
    request.uploadHandler = uploadHandler;
    request.downloadHandler = new DownloadHandlerBuffer();
    request.SetRequestHeader("Content-Type", "application/json");
    request.SetRequestHeader("Authorization", "Bearer " + DriveAPI.getInstance().getAuthToken());

    yield return request.Send();

    if (www.error != null)
    {
        Debug.Log("Error: " + www.error);
    }
    else
    {
        Debug.Log("Status Code: " + request.responseCode);
    }

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

https://stackoverflow.com/questions/46229739

复制
相关文章

相似问题

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