我正在尝试将一个OAuth2持有者令牌和一个Post请求一起传递给我的服务器(使用Google Apps脚本执行API)。无论我如何尝试设置授权令牌,我都会收到401未授权错误。我确信我不知何故设置错了,但我一直无法找出哪里出了问题。
下面是我当前的代码。
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;
}
}我尝试过在实际的数据对象中设置头文件,但也没有成功。
发布于 2017-09-15 23:19:30
事实证明我的代码运行得很好。
来自Apps脚本的错误消息具有误导性,因为正在发送Auth令牌。我能够通过从我的脚本(服务于执行API端点)生成一个auth令牌并在我的应用程序中硬编码该令牌来测试正确性。这样做的结果是请求成功。
我已经检查了脚本中使用的云项目和我的应用程序中使用的云项目是相同的,但仍然收到错误,但这是另一个问题的问题:)。
发布于 2017-09-15 15:13:26
尝试编码为UTF8,将UploadHandleRaw更改为UploadHandle,并将request设置为single Post:
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);
}
}https://stackoverflow.com/questions/46229739
复制相似问题