包含方括号的参数的PowerShell 403 HTTP请求

时间:2017-10-25 20:48:55

标签: powershell http https httpwebrequest

我正在尝试使用PowerShell中的以下行创建PATCH请求,但它返回403:

Try{
    $Body = @{
       'api_key' = 'myapikey'
       'item[status]' = 'unavailable'
    } | ConvertTo-Json
    $response = Invoke-WebRequest -Method PATCH -Uri "https://api.example.com/store/apikey.json" -Body $Body -ContentType "application/json"
    $response.StatusCode
}
Catch [System.Net.WebException]{
    $code = [int]$_.Exception.Response.StatusCode
}

Fiddler返回403并带有以下消息:“{”error“:”参数项是必需的“}”。此外,Fiddler中的查询字符串为空。但是,当所有内容都硬编码到Uri中时,会成功提出请求:

$statusUpdate = Invoke-WebRequest -Method PATCH -Uri "https://api.example.com/store/apikey.json?api_key=myapikey&item[status]=unavailable" -ContentType "application/json"

1 个答案:

答案 0 :(得分:1)

如果那是你实际用来命中API的代码,你的问题似乎只是由于将你的json主体管道输出到主机,因此向API发送一个空的$ Body,所以你应该将它编辑为这样做:

try
{
  $Body = @{
    'api_key' = 'myapikey'
    'item[status]' = 'unavailable'
  } | ConvertTo-Json
  $response = Invoke-WebRequest -Method PATCH -Uri "https://api.example.com/store/apikey.json" -Body $Body -ContentType "application/json"
  $response.StatusCode
}
catch [System.Net.WebException]
{
  $code = [int]$_.Exception.Response.StatusCode
}
相关问题