【问题标题】:Powershell Invoke-RestMethodPowershell Invoke-RestMethod
【发布时间】:2015-02-04 04:29:37
【问题描述】:

我正在尝试创建一个 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"}' 

但是这也不起作用。

任何人都可以在这里指出正确的方向吗?这不可能那么疯狂,我只是想将参数传递给一个 rest-method 查询字符串。在这一点上,任何帮助将不胜感激。

-肖恩

【问题讨论】:

  • 你找到答案了吗?我也有类似的问题。
  • 我能够获取会话令牌,然后在 DNS 结构中工作,但我遇到了子区域和其他问题。由于基于 URL 的命令结构存在问题,我无法获得完整的区域创建/管理功能。我可能仍然能够重新创建我构建的东西,或者如果你有一个样本,我可以看看你那里有什么。

标签: api rest powershell


【解决方案1】:

内容类型

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,但这有助于防止这种情况发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多