PowerShell 6.2.1 不使用 Invoke-WebRequest 返回 Forms 属性。我过去在 Powershell 5 中的做法:
$r = Invoke-WebRequest -Uri 'somewebsite.com' -SessionVariable f
$f
$form = $r.Forms[0]
$form.Fields["userName"] = "username"
$form.Fields["brokerPassword"] = "password"
$login = Invoke-WebRequest -Uri 'somewebsite.com' -WebSession $f -Method
POST -Body $form.Fields
我在 Microsoft 文档中看到现在有一个-Form
可以使用的参数,但我已经破解了几个小时,但收效甚微。
他们提供了两种可能的解决方案。
示例 1
$Uri = 'https://api.contoso.com/v2/profile'
$Form = @{
firstName = 'John'
lastName = 'Doe'
email = 'john.doe@contoso.com'
avatar = Get-Item -Path 'c:\Pictures\jdoe.png'
birthday = '1980-10-15'
hobbies = 'Hiking','Fishing','Jogging'
}
$Result = Invoke-RestMethod -Uri $Uri -Method Post -Form $Form
示例 2
$Body = @{
User = 'jdoe'
password = 'P@S$w0rd!'
}
$LoginResponse = Invoke-WebRequest 'http://www.contoso.com/login/' -
SessionVariable 'Session' -Body $Body -Method 'POST'
$Session
$ProfileResponse = Invoke-WebRequest 'http://www.contoso.com/profile/' -
WebSession $Session
$ProfileResponse
我都试过了,我当前的代码块是两者的组合,它至少让我失败了。
$username = 'useremail@gmail.com'
$password = 'p@ssw0rd'
$form = @{
LoginForm_password = $password
LoginForm_username = $username
}
$result = Invoke-WebRequest 'https://www.podbean.com/login' -
SessionVariable foo -Form $form -Method POST
$foo
$result | Get-Member | Format-table
这是我现在得到的错误。
调用 WebRequest :
403 禁止
Forbidden 您无权访问此服务器上的 /login。
在行:7 字符:11
- $result = Invoke-WebRequest 'https://www.podbean.com/login' -SessionV ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- CategoryInfo : InvalidOperation: (Method: POST, Reque\u2026tent-Length: 357 }:HttpRequestMessage) [Invoke-WebRequest], HttpResponseException
- FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
这实际上是我得到的最好的回应。