Invoke-RestMethod和Fiddler,得不到200个代码作为回报

时间:2016-11-01 13:45:20

标签: rest powershell

我正在尝试复制可以使用Invoke-RestMethod从GUI发送的POST调用。我想自动化它并且一直在尝试使用PowerShell来实现它。

它alwasy返回202代码,现在已经尝试了几个小时,但无法进展。这是我第一次玩invoke-restmedod和Rest所以请详细说明错误。任何帮助都非常感谢。

因此Fiddler捕获的成功电话就是:

enter image description here

enter image description here

powershell代码是:

$WfManDirUserPass = "Password"
$secpasswd = ConvertTo-SecureString $WfManDirUserPass   -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ("admin", $secpasswd)

$active = @{
 ipaddress="192.168.100.116"
 Port="62805"
 status="0"
 }
$json = $active | ConvertTo-Json

try{
   $response = invoke-restmethod -uri https://myhost/MAM/wfservice/workers/?ip="&"port="&"newStatus=Deactivating -Method POST -Body $json -Credential $cred -ContentType 'application/json'
} catch {
  write-host("Sorry, it does not work")
  }

Fiddler中的这个powershell代码返回:

enter image description here enter image description here

我可以看到JSON在附加图像上并不完全相同。但是我现在卡住了,现在真的很感激一些帮助。

1 个答案:

答案 0 :(得分:1)

这是1RedOne(Reddit)用户的回复,帮助了我:

  1. 首先,让我们将整个-URI用单引号括起来并删除双引号。您的网址可能搞砸了,这无济于事。

    $uri = 'https://myhost/MAM/wfservice/workers/?ip=&port=&newStatus=Deactivating' 
    

    $ response = invoke-restmethod -uri $ uri-Method POST -Body $ json -Credential $ cred -ContentType'application / json'

  2. 2。 此外,来自fiddler的调用使用基本身份验证,可能与使用-Credential对象不兼容。尝试使用此格式替换您的凭据。

    $user = "yourusername"
    $pass = 'yourPassWord'
    
    # Build auth header
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))
    
    # Set proper headers
    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo))
    

    然后,在你的Invoke-RestMethod中引用$ header对象,就像这样。

    $response = invoke-restmethod -uri $uri- Method POST `
       -Body $json -Header $headers -ContentType 'application/json'
    

    就是这样。它就像一个魅力!