SOLVED

Passing information to API, works in CURL, not in PS7

Copper Contributor

This API call to a Cisco Firepower 1120 works in CURL (on Ubuntu)... please note credentials and host name have been obfuscated here but are correct in the original versions:

 

curl --cacert fwcert -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ "grant_type": "password", "username": "myaccountname", "password": "mypassword" }' 'https://myhost/api/fdm/v5/fdm/token'

 

...this API returns a temporary token for use in future API requests.   It works precisely as expected with a return 200 response and all the fields I need.

 

I am attempting to get this to work in PowerShell 7 (I also tried Powershell ISE v5 before I upgraded), with the following seemingly equivalent code:

 

$param = @{
"grant_type"="password"
"username"="myaccountname"
"password"="mypassword"
} | ConvertTo-Json

$fwurl = 'https://myhost/api/fdm/v5/fdm/token'

Invoke-RestMethod -Uri $fwurl -Method POST -SkipCertificateCheck -Body $param

 

... and I get the following error: 

 

Invoke-RestMethod: {"message":"Token grant_type is either not-specified or not-supported - null","status_code":400}

 

Since it works in CURL but not Powershell I'm thinking I'm doing something wrong with the PS script but I can't figure out what it is.  Help? 

 

2 Replies
best response confirmed by ChrisSchroeder (Copper Contributor)
Solution

Hello @ChrisSchroeder,

I think you are missing -ContentType parameter:

If this parameter is omitted and the request method is POST, Invoke-RestMethod sets the content type to application/x-www-form-urlencoded.

 

 

Invoke-RestMethod -Uri $fwurl -Method POST -SkipCertificateCheck -Body $param -Content 'application/json'

 

 

Reference: Invoke-RestMethod

Hope that helps.

Thank you Andy! I had tried that before in previous iterations (when obviously something else was wrong) but somewhere along the way I left it out of my testing. I appreciate your help - it works fine now!!
1 best response

Accepted Solutions
best response confirmed by ChrisSchroeder (Copper Contributor)
Solution

Hello @ChrisSchroeder,

I think you are missing -ContentType parameter:

If this parameter is omitted and the request method is POST, Invoke-RestMethod sets the content type to application/x-www-form-urlencoded.

 

 

Invoke-RestMethod -Uri $fwurl -Method POST -SkipCertificateCheck -Body $param -Content 'application/json'

 

 

Reference: Invoke-RestMethod

Hope that helps.

View solution in original post