【发布时间】: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/<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"}' 以在一行中。
我也试过(因为只需要“tag_name”参数):
curl -i -H 'Authorization: token <myToken>' -d '{"tag_name":"4.2.0"}' https://api.github.com/repos/<myUsername>/<myRepo>/releases
curl -i -H 'Authorization: token <myToken>' -d '{"tag_name":"4.2.0"}' https://api.github.com/repos/<myUsername>/<myRepo>/releases --header Content-Type:application/json
curl -d '{"tag_name":"4.2.0"}' -u <myUsername>:<myToken> https://api.github.com/repos/<myUsername>/<myRepo>/releases --header "Content-Type:application/json"
curl -d "tag_name=4.2.0" -u <myUsername>:<myToken> https://api.github.com/repos/<myUsername>/<myRepo>/releases --header "Content-Type:application/json"
每个 curl 请求都失败并出现“解析 JSON 的问题”错误。
【问题讨论】:
-
我很好奇你为什么在这里使用
--data-raw而不仅仅是--data,如此处所示stackoverflow.com/a/7173011/1363815 -
在 JSON 中正确转义引号也可能存在一些问题,具体取决于您使用的操作系统和 shell(请参阅 cmets)
标签: json curl github github-api