我正在尝试创建一个 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) 不可接受。 行:12 字符:9
- $test = Invoke-RestMethod -Method Post -Uri $url -Body $body
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- CategoryInfo:InvalidOperation:(System.Net.HttpWebRequest:HttpWebRequest)[Invoke-> RestMethod],WebException
- 完全限定错误 ID: WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
这应该是根据 DYN 信息进行的 JSON 查询,因此我尝试了使用 CURL 作为基础的 DYN 的其他几个示例:
$json = @"{"customer_name":"yourcustomer","user_name":"youruser","password":"yourpass"}'
但是这也行不通。
有人能指出我正确的方向吗? 这不可能那么疯狂,我只是想将参数传递到休息方法查询字符串中。 此时,我们将非常感谢任何帮助。
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,但这可以帮助防止这种情况发生。