编写 UnityWebRequest.Post 的问题

问题描述

我不知道如何根据这些信息编写正确的 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!");
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...