以下是对GitHub api v4的cURL查询示例,该查询不断返回错误:
curl -H "Authorization: bearer token" -X POST -d " \
{ \
\"query\": \"query { repositoryOwner(login: \"brianzelip\") { id } }\" \
} \
" https:\/\/api.github.com\/graphql
返回的错误:
{
"message": "Problems parsing JSON",
"documentation_url": "https://developer.github.com/v3"
}
为什么我一直收到此错误?
根据GH api v4 docs about forming query calls,上述cURL命令有效。以下是文档所说的,支持我声称上述cURL命令有效:
curl -H "Authorization: bearer token" -X POST -d " \
{ \
\"query\": \"query { viewer { login }}\" \
} \
" https://api.github.com/graphql
注意:“query”的字符串值必须转义换行符或 架构不会正确解析它。对于POST正文,请使用outer 双引号和转义内部双引号。
当我将上述查询输入GitHub GraphQL API Explorer时,我得到了预期的结果。对于GH GraphQL Explorer,上述cURL命令的格式如下所示:
{
repositoryOwner(login: "brianzelip") {
id
}
}
答案 0 :(得分:2)
你必须在query
JSON字段中转义嵌套的双引号,你的实际身体将是:
{
"query": "query { repositoryOwner(login: \"brianzelip\") { id } }"
}
所以用\"brianzelip\"
替换\\\"brianzelip\\\"
:
curl -H "Authorization: bearer token" -d " \
{ \
\"query\": \"query { repositoryOwner(login: \\\"brianzelip\\\") { id } }\" \
} \
" https://api.github.com/graphql
您还可以使用单引号而不是双引号来包裹正文:
curl -H "Authorization: bearer token" -d '
{
"query": "query { repositoryOwner(login: \"brianzelip\") { id } }"
}
' https://api.github.com/graphql
您也可以使用heredoc:
curl -H "Authorization: bearer token" -d @- https://api.github.com/graphql <<EOF
{
"query": "query { repositoryOwner(login: \"brianzelip\") { id } }"
}
EOF