我们如何使用 curl 向外部 API 发送 GET 请求?

我们如何使用 curl 向外部 API 发送 GET 请求?

我目前正在尝试使用 OneSignal REST API。我想使用 GET 方法调用查看应用程序操作:

查看应用程序描述

我尝试使用以下命令使用 PowerShell,并使用我自己的 APP_ID:

curl --include \
     --header "Authorization: Basic YWUwZDhjNjAtZDQ4ZS00NWI5LWJjMzctYz" \
 https://onesignal.com/api/v1/apps

并输出:

未找到接受参数 \ 的位置参数

PowerShell 中的 Curl 错误

然后我尝试执行:

curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Basic YWUwZDhjNjAtZDQ4ZS00NWI5LWJjMzctYz' -v -i 'https://onesignal.com/api/v1/apps'

并输出:

无法链接 Headers 参数。无法将值 'Content-Type:application/json' 从“System.String”类型转换为“System.Collections.IDictionary”类型。 curl 第二次请求结果

然后我尝试使用Postman,如下:

Postman 请求

我们的请求翻译成代码如下:

GET /api/v1/apps HTTP/1.1
Host: onesignal.com
Content-Type: application/json
Authorization: Basic YWUwZDhjNjAtZDQ4ZS00NWI5LWJjMzctYz
User-Agent: PostmanRuntime/7.19.0
Accept: */*
Cache-Control: no-cache
Postman-Token: 32a57eb1-1660-4f7b-b141-7fccf83d0851,537878c7-5135-48a8-a04a-1125824785b9
Host: onesignal.com
Accept-Encoding: gzip, deflate
Cookie: __cfduid=ded10b101ef5b9cd648b95b6d2e88f1261572874737
Connection: keep-alive
cache-control: no-cache

然而它回答了我们:400 Bad Request:

{
    "errors": [
        "Please include a case-sensitive header of Authorization: Basic <YOUR-USER-AUTH-KEY-HERE> with a valid User Auth key."
    ],
    "reference": [
        "https://documentation.onesignal.com/docs/accounts-and-keys#section-user-auth-key"
    ]
}

我已经阅读了回复中给出的 API 文档,并且我确定我正在使用 REST API KEY,因为它是文档中要求的(下面的图片显示了 REST API KEY 的样子)。

REST API 密钥

最后我尝试了一个网络应用程序,以如下方式发送请求:

ApiRequest.io

生成的 CURL 命令为:

curl -X GET -H'内容类型:application/json'-H'授权:基本YWUwZDhjNjAtZDQ4ZS00NWI5LWJjMzctYz'-v -i'https://onesignal.com/api/v1/apps

然而回应依然是:

Error

Error: Bad Request

Response: 400
headers:

{
  "cache-control": "no-cache",
  "content-type": "application/json; charset=utf-8"
}

body:

{
  "errors": [
    "Please include a case-sensitive header of Authorization: Basic <YOUR-USER-AUTH-KEY-HERE> with a valid User Auth key."
  ],
  "reference": [
    "https://documentation.onesignal.com/docs/accounts-and-keys#section-user-auth-key"
  ]

我搜索了信息,并阅读了一个 github 线程,其中建议您确认使用的是正确的 REST API KEY。 信息

此外,我之前还读过:

PowerShell 相当于 curl 访问经过身份验证的 Kraken API 的 cURL 示例

我们如何使用 PowerShell 或任何其他命令行工具发送 GET 请求?

我们如何才能创建一个格式良好的请求,如 OneSignal 文档中所示?

答案1

此 API 端点需要您的用户身份验证密钥,而不是您的应用身份验证密钥。原因是此 API 端点用于列出您的所有 OneSignal 应用,而不仅仅是某个特定的应用。

有关如何获取用户身份验证密钥的详细信息,请参阅此处的文档页面:https://documentation.onesignal.com/docs/accounts-and-keys#section-user-auth-key

相关内容