Invoke-WebRequest 失败 - 使用 GitHub api“解析 json 的问题”

K S*_*t X 5 powershell json curl github graphql

我正在尝试Graphql通过 powershell与api进行通信。根据 Github 的说法,必须首先进行以​​下curl调用。

curl -H "Authorization: bearer token" -X POST -d " \
 { \
   \"query\": \"query { viewer { login }}\" \
 } \
" https://api.github.com/graphql
Run Code Online (Sandbox Code Playgroud)

使用GitHub Enterprise,在 powershell 上,我执行以下调用:

$url = "http://github.company.com/api/graphql" # note that it's http, not https

$body = "`"query`":`"query { viewer { login }}`""                                               #`

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"

$headers.Add("content-type","application/json")

$headers.Add("Authorization","bearer myTokenNumber")

$response = Invoke-WebRequest -Uri $url -Method POST -Body $body -Headers $headers
Run Code Online (Sandbox Code Playgroud)

我不断收到相同的错误消息,解析 JSON 时出现问题。

我认为错误出在body标签上,但我看不出是怎么回事。

echo $body"query":"query { viewer { login }}"

这里有什么问题?

确切的错误信息:

Invoke-WebRequest : {"message":"Problems parsing JSON","documentation_url":"https://developer.github.com/v3"}
At line:1 char:13
+ $response = Invoke-WebRequest -Uri $url -Method POST -Body $body -Headers $heade ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc
   eption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 4

您的$body值是格式错误的 JSON,因为它缺少封闭的{ ... }.

使用here-string可以更轻松地构建JSON字符串:

$body = @'
{ "query": "query { viewer { login } }" }
'@
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用哈希表文字简化构建标头:

$headers = @{
  "content-type" = "application/json"
  "Authorization" = "bearer myTokenNumber"
}
Run Code Online (Sandbox Code Playgroud)