我目前正在尝试使用PowerShell创建一个POST
请求。这是我最初的hashArray
:
$hashArrayOfStrings = @(
@{
criteria = '"platform" = "iOS" AND "connected_at" >= "now-1d" AND "client.connected" >= "now-1d" AND "apns" = true AND ( "version" STARTS WITH "1" OR "version" STARTS WITH "2" )'
name = "iOS"
description = "Description1"
},@{
criteria = '“platform” = “android” AND “connected_at” >= “now-1d” AND ( “client.connected” < “now-1d” OR “apns” = false ) AND ( “version” STARTS WITH “1” OR “version” STARTS WITH “2” )'
name = "name2"
description = "Description2"
})
这是调用API的函数:
function Call-API {
param ($ID,$criteria,$name,$description)
$url = "$($global:apiURL)?id=1"
$body =@{ criteria = $criteria; name = $name; description = $description; SpaceId = $ID; static = $false }
(($body | ConvertTo-Json) -replace '"','\"')
try {
$results = Invoke-RestMethod -Uri $url -Headers $global:headers -Body $body -Method Post -ContentType "application/json"
return $results.results
}
catch { Show-Error -errorInfo $_ }
然后我使用以下代码调用该函数:
$hashArrayOfStrings | ForEach-Object {
try {
Call-API -ID $ID -criteria $_.criteria -name $_.name -description $_.description
}
catch { Show-Error -errorInfo $_ }
}
使用cURL进行测试有效:
curl -X POST -H 'Authorization: Basic xxxxxxxxxxxx' -H "Content-Type: application/json" 'https://apiurl.com?Id=1' --data-binary '{"name": "test","description": "test description.","SpaceId": 1,"static": false,"criteria": "(\"platform\"=\"Android\") AND \"apns\"=false"}'
并使用请求对python进行了一些测试,并且也可以使用。
我认为问题在于转义字符。该API在POST数据中需要一个字符串。
我已经在每个双引号前面加上`进行了测试,结果相同:
microsoft.PowerShell.Commands.HttpResponseException: Response status code does not indicate success: 405 (Method Not Allowed).
at System.Management.Automation.MshCommandRuntime.ThrowTerminatingError(ErrorRecord errorRecord)