15

由于我升级到 Windows 8,很多依赖于启动不可见 IE 的 PowerShell 脚本将不再工作,所以我尝试切换到Invoke-WebRequest命令。我做了很多谷歌搜索,但仍然无法让我的脚本正常工作。

这是它应该做的:

  1. 使用简单的表单(用户名、密码、提交按钮)加载网站,
  2. 输入凭据
  3. 并提交。

Microsoft tech-net的示例对我来说不是很有帮助,这是我拼凑起来的:

$myUrl = "http://some.url"  

$response = Invoke-WebRequest -Uri $myUrl -Method Default -SessionVariable $rb
$form = $response.Forms[0]
$form.Fields["user"]     = "username"
$form.Fields["password"] = "password"

$response = Invoke-WebRequest -Uri $form.Action -WebSession $rb -Method POST 
$response.StatusDescriptionOK

我收到两个错误,第一个是在尝试写入该user字段时:

Cannot index into a null array.

$form.Fields["user"]     = "username"

    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

第二个与$form.Action我不知道应该读什么有关:

Invoke-WebRequest : Cannot validate argument on parameter 'Uri'. The argument is  null or empty. Supply an argument that is not null or empty and then try the command  again.

同样,我严重依赖Microsoft 的示例 #2

4

4 回答 4

15

尝试直接发帖,例如:

$formFields = @{username='john doe';password='123'}
Invoke-WebRequest -Uri $myUrl -Method Post -Body $formFields -ContentType "application/x-www-form-urlencoded"
于 2012-12-05T21:17:38.307 回答
7

要解决未签名/不受信任证书的问题,请添加以下行

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

在 Invoke-WebRequest 语句之前

于 2014-09-08T19:47:03.307 回答
3

问题中的示例有效,但您必须使用rb而不是$rb在第一行:

$response = Invoke-WebRequest -Uri $myUrl -Method Default -SessionVariable rb

我也必须使用($myUrl + '/login'),因为这是我的登录地址。

$response = Invoke-WebRequest -Uri ($myUrl + '/login') - 方法默认值 -SessionVariable rb

在最后一行使用($myUrl + $form.Action)

$response = Invoke-WebRequest -Uri ($myUrl + $form.Action) -WebSession $rb -Method POST
于 2016-06-09T15:00:50.453 回答
0

如果您是我,并且一直在对错误的 Web 请求进行故障排除,在我的情况下-Body,这是null在我的 API 中出现的问题,那么您将想知道关于将行延续与注释交错的问题。这个

$r = iwr -uri $url `
    -method 'POST' `
    -headers $headers `
    # -contenttype 'application/x-www-form-urlencoded' ` # default
    -Body $body

注意注释掉的行# -contenttype 'application/x-www-form-urlencoded' # default

放置注释会截断剩余的反引号续行。因此,在我的情况下,我的 Web 请求以具有 0 字节有效负载的请求结束。

于 2020-02-12T19:30:13.843 回答