Powershell Invoke-RestMethod

时间:2014-12-05 22:06:35

标签: api rest powershell

我正在尝试创建一个PowerShell脚本来访问DYN的API并对我使用/测试的DNS区域执行检查/更新。

我关注他们的API详细信息,这是第一个链接https://help.dyn.com/session-log-in/

这是我编写的REST脚本的开头:

$url = "https://api2.dynect.net/REST/Session/"
$body = @{customer_name='mahcompany';user_name='mahname';password='mahpass'}
Invoke-RestMethod -Method Post -Uri $url  -Body $body

这会产生以下结果:

  

Invoke-RestMethod:远程服务器返回错误:(406)Not Acceptable。   在行:12 char:9   + $ test = Invoke-RestMethod -Method Post -Uri $ url -Body $ body   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~       + CategoryInfo:InvalidOperation:(System.Net.HttpWebRequest:HttpWebRequest)[Invoke-> RestMethod],WebException       + FullyQualifiedErrorId:   WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

这应该是根据DYN信息的JSON查询,因此我尝试使用CURL作为基础的其他几个DYN示例:

$json = @"{"customer_name":"yourcustomer","user_name":"youruser","password":"yourpass"}' 

然而,这也不起作用。

有人能指出我在正确的方向吗?这不是那么疯狂,我只是试图将参数传递给rest-method查询字符串。在这一点上,非常感谢任何帮助。

-Sean

1 个答案:

答案 0 :(得分:10)

内容类型

Invoke-RestMethod -Method Post -Uri $url -Body $body -ContentType 'application/json'

如果dyn.com期望正确的内容类型,这可能是问题。

根据Invoke-RestMethod上的文件:

  

如果省略此参数且请求方法为POST,则Invoke-RestMethod将内容类型设置为“application / x-www-form-urlencoded”。否则,呼叫中未指定内容类型。

ConvertTo-JSON

您不必手动创建JSON字符串。您可以创建一个哈希表,然后将其转换为:

$data = @{
    customer = 'something'
    name = 'whatever'
}
$data | ConvertTo-JSON

我并不是说你肯定会制作格式错误的JSON,但这有助于防止这种情况发生。