问题描述
我不知道如何根据这些信息编写正确的 UnityWebRequest.Post :
curl --location --request POST 'https://url.com/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic UE5weXFUUUZjU1NTSkQ4eDFzQ0Fh' \
--header 'Cookie: ASP.NET_SessionId=qqjltxh; LSW_WEB=gatewaytraffic01; back_apim-tst_https=gateway-swarm-manager-03' \
--data-urlencode 'grant_type=client_credentials'
此请求的目的是获取令牌。我试过这样写请求:
WWWForm form = new WWWForm();
form.AddField("Content-Type","application/x-www-form-urlencoded");
form.AddField("Authorization","Basic UE5wzQ0Fh");
form.AddField("Cookie","ASP.NET_SessionId=qqjxh; LSW_WEB=gatewaytraffic01; back_apim-tst_https=gateway-swarm-manager-03");
form.AddField("grant_type","client_credentials");
UnityWebRequest uwr = UnityWebRequest.Post("https://url.com/token",form);
yield return uwr.SendWebRequest();
我收到错误 401,我真的不确定“Cookie”和“grant_type”字段。当我发送没有这些字段的请求时,我收到错误 400。
有人能解释一下我应该如何处理这个请求吗?
谢谢。
解决方法
标题 != 表单域
您收到了401
未经授权
该请求没有被应用,因为它缺少目标资源的有效身份验证凭据。
由于您将所有必需的身份验证标头作为正文中的表单字段发送,因此您的请求缺少相应的标头,因此未获得授权。
如果没有 grant_type
数据字段,您将获得 400
错误请求
由于某些被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或不会处理请求。
因为你没有发送任何数据。
标题可以通过 UnityWebRequest.SetRequestHeader
您的请求可能更像是
// Using this overload the Content-Type is automatically set to application/x-www-form-urlencoded
using(var uwr = UnityWebRequest.Post("https://url.com/token","grant_type=client_credentials"))
{
uwr.SetRequestHeader("Authorization","Basic UE5wzQ0Fh");
uwr.SetRequestHeader("Cookie","ASP.NET_SessionId=qqjxh; LSW_WEB=gatewaytraffic01; back_apim-tst_https=gateway-swarm-manager-03");
yield return uwr.SendWebRequest();
// You should check for the results
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log($"{www.responseCode} - {www.error}",this);
}
else
{
Debug.Log("Data upload complete!");
}
}