【问题标题】:Github API error "Problems parsing JSON" when using curl but works fine with Postman使用 curl 时出现 Github API 错误“解析 JSON 的问题”,但与 Postman 一起工作正常
【发布时间】:2022-02-18 18:54:53
【问题描述】:

我正在尝试使用 Github 的 API 创建一个版本。

我的请求在 Postman 中运行良好,但无论我尝试过什么,curl 总是失败,包括如果我只是使用 Postman 将我的 Postman 请求转换为 curl。

这是我的 Postman POST 请求的正文:

{
    "tag_name": "4.2.0",
    "target_commitish": "master",
    "name": "4.2.0",
    "body": "test"
}

我包含了一个“基本”类型的授权标头,我在其中输入了我的用户名和为此目的创建的令牌。
我正在针对https://api.github.com/repos/<myUsername>/<myRepo>/releases 执行请求。

正如我所说 - 它工作正常,但是当我将它翻译成 curl 时,我收到错误“解析 JSON 的问题”。

翻译后的 curl 命令为:

curl --location --request POST 'https://api.github.com/repos/<myUsername>/<myRepo>/releases' \
--header 'Authorization: Basic <someHashOrSomething>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "tag_name": "4.2.0",
    "target_commitish": "master",
    "name": "4.2.0",
    "body": "test"
}'

我将其重新格式化为 curl --location --request POST 'https://api.github.com/repos/&lt;myUsername&gt;/&lt;myRepo&gt;/releases' --header 'Authorization: Basic &lt;someHashOrSomething&gt;' --header 'Content-Type: application/json' --data-raw '{ "tag_name": "4.2.0", "target_commitish": "master", "name": "4.2.0", "body": "test"}' 以在一行中。

我也试过(因为只需要“tag_name”参数):
curl -i -H 'Authorization: token &lt;myToken&gt;' -d '{"tag_name":"4.2.0"}' https://api.github.com/repos/&lt;myUsername&gt;/&lt;myRepo&gt;/releases
curl -i -H 'Authorization: token &lt;myToken&gt;' -d '{"tag_name":"4.2.0"}' https://api.github.com/repos/&lt;myUsername&gt;/&lt;myRepo&gt;/releases --header Content-Type:application/json
curl -d '{"tag_name":"4.2.0"}' -u &lt;myUsername&gt;:&lt;myToken&gt; https://api.github.com/repos/&lt;myUsername&gt;/&lt;myRepo&gt;/releases --header "Content-Type:application/json"
curl -d "tag_name=4.2.0" -u &lt;myUsername&gt;:&lt;myToken&gt; https://api.github.com/repos/&lt;myUsername&gt;/&lt;myRepo&gt;/releases --header "Content-Type:application/json"

每个 curl 请求都失败并出现“解析 JSON 的问题”错误。

【问题讨论】:

  • 我很好奇你为什么在这里使用--data-raw 而不仅仅是--data,如此处所示stackoverflow.com/a/7173011/1363815
  • 在 JSON 中正确转义引号也可能存在一些问题,具体取决于您使用的操作系统和 shell(请参阅 cmets)

标签: json curl github github-api


【解决方案1】:

如果您是在 windows cmd 提示符下执行此操作,则需要更改

--data-raw '{   "tag_name": "4.2.0",    "target_commitish": "master",   "name": "4.2.0",    "body": "test"}'

--data-raw "{   \"tag_name\": \"4.2.0\",    \"target_commitish\": \"master\",   \"name\": \"4.2.0\",    \"body\": \"test\"}"

cmd 提示似乎不喜欢数据的单引号。

【讨论】:

    【解决方案2】:

    如何调试:

    • 在 curl 命令中添加“-v --trace-ascii -”以查看命令日志。
    • 在 cmd 或 PowerShell 中为您的数据使用 echo 或 write-host

    请记住,确保 curl 接收到有效的 JSON 数据非常重要。

    查看 Powershell 的示例here

    【讨论】:

      【解决方案3】:

      问题可能出在您的 API 密钥上。

      检查它是否有足够的权限或尝试创建一个新的。

      【讨论】:

      • 这不是答案。使用此类消息的评论部分。
      • @SwatantraKumar 这是一个很好的答案,我前段时间遇到了同样的问题,这就是我解决它的方法。
      猜你喜欢
      • 2017-12-27
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多