【问题标题】:How do I access the value of a field returned by a Restful API如何访问由 Restful API 返回的字段的值
【发布时间】:2017-11-01 01:41:06
【问题描述】:

我有一个非常基本的要求来调用 RESTful API。我目前在使用 PowerShell 版本 4 的 Windows 2012 R2 服务器上。

这是我的代码:

$logon = @{
    username = 'blah'
    password='blah'
}

$body = $logon | ConvertTo-Json 

$URI = 'https://URL/Logon'

Invoke-WebRequest -URI $URI -Method POST -Body $body -ContentType 'application/json' -Verbose 

我得到以下结果:

{"LogonResult":"blahblahblah"}

如何仅提取登录令牌以作为变量重复使用?我已经在命令的开头放了一个变量:

   $token =  (Invoke-WebRequest -URI $URI -Method POST -Body $body -ContentType 'application/json' -Verbose).content 

这将返回整个结果,而不仅仅是令牌。结果如何才能获得令牌?

【问题讨论】:

  • 嘿,不,端点没有公共 API。我已经尝试过 GET 和 POST,对于该特定命令(登录),它需要根据文档进行 POST。它还应该返回一个登录令牌,然后我在登录后使用它来发出进一步的命令。
  • 只是为了添加更多信息。当我故意输入错误密码时,我得到以下信息:URL 使用 -1 字节有效负载登录 Invoke-WebRequest : {"ErrorCode":"ITATS004E","ErrorMessage":"Authentication failure for User 8780575."} At D:\test-websdk.ps1:10 char:1 + Invoke-WebRequest -URI $URI -Method POST -Body $body -ContentType 'application/j ... + ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~和原来的错误一样跨度>
  • 将服务器日志添加到主帖 - 更易于阅读
  • 有进展,我得到一个返回值现在在 OP 中更新了

标签: rest api powershell restful-authentication


【解决方案1】:

可以通过如下方式获取返回的LogonResult属性的值:

$token =  ((Invoke-WebRequest -URI $URI -Method POST -Body $body -ContentType 'application/json' -Verbose).content | ConvertFrom-JSON).LogonResult

或者您可以通过使用Invoke-RestMethod 来简化此操作,因为它只返回内容并自动将其转换为 PSObject:

$token =  (Invoke-RestMethod -URI $URI -Method POST -Body $body -ContentType 'application/json' -Verbose).LogonResult

【讨论】:

  • 我希望你不介意,我已经编辑了你的问题,现在它只与这个答案相关(因为其他信息现在对未来的读者来说是不必要的/令人困惑的)。
猜你喜欢
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2018-09-16
  • 2020-05-26
  • 2014-09-01
  • 2017-10-25
相关资源
最近更新 更多