I'm currently trying to create a POST request using PowerShell. this is my initial 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" }) This is the function to call the 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 $_ } Then I'm calling the function with this code:
$hashArrayOfStrings | ForEach-Object { try { Call-API -ID $ID -criteria $_.criteria -name $_.name -description $_.description } catch { Show-Error -errorInfo $_ } } Testing with cURL works:
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"}' and did some testing with python using requests and also works.
I think the problem is escaping the characters. the API is expecting a string in the data of POST.
I've tested with ` in front of each double quote symbol with the same result:
Microsoft.PowerShell.Commands.HttpResponseException: Response status code does not indicate success: 405 (Method Not Allowed). at System.Management.Automation.MshCommandRuntime.ThrowTerminatingError(ErrorRecord errorRecord)
“”quotes and not"".