如果一直在使用下面的命令行来查询简单的 Web 表单,以识别制作后续表单 POST 所需的所有输入字段。但是,我刚刚遇到了一个相对简单的 Web 表单,它有两个输入字段,以下命令无法识别:
Invoke-WebRequest 'http://URI.com/index.aspx' -WebSession $Save |
select -ExpandProperty inputfields | select name, value
. .
在下面的 HTML 源代码示例中,上面的命令将识别具有“输入名称”的所有内容(如下面的 html 所示);但是,不是其他输入类型;例如,“选择”、“文本区域”。我想知道可以识别以下 HTML 源示例中显示的所有输入字段类型的“the”命令行;以及通过 Powershell Invoke-WebRequest 发布表单所需的任何其他不可预见的输入类型。
HTML 源代码:
..align="right" style="white-space:nowrap;"><input name="MainPage$LastName"..
..align="right" style="white-space:nowrap;"><input name="MainPage$email"..
..align="right" style="white-space:nowrap;"><input name="MainPage$phone"..
..align="right" style="white-space:nowrap;"><select name="MainPage$CountryDropDownList"..
..align="right" style="white-space:nowrap;"><input name="MainPage$Description"..
..align="right" style="white-space:nowrap;"><textarea name="MainPage$DescribeHere"..
. .
PS:我应该在 POST 时使用上述 Invoke-WebRequest 命令行中返回的名称,还是使用以下命令行中返回的名称?因为,它们是不同的。
$r.Forms[0] | $form.fields
编辑:上述 Invoke-WebRequest 的结果是(下)。如您所见, *MainPage_CountryDropDownList*和*MainPage_DescribeHere*如下所示:
Key Value
--- -----
__VIEWSTATE /wEPDwULLTE5OT
__EVENTVALIDATION /wEWEALtsrvJAgLkmtI29k...
MainPage__FirstName Craig
MainPage__LastName Smith
MainPage__email CraigSMith@gmail.com
MainPage__phone
MainPage__Project
MainPage__Submit Submit
编辑: 我以前从未处理过 VIEWSTATE 和 EVENTVALIDATION。有人可以确认我可以简单地发布我第一次开始网络会话时收到的相同的 VIEWSTATE 和 EVENTVALIDATION 值吗?当网络会话开始时,它们很容易存储在变量中。所以,希望当我去 POST 时,这些值可以保持原样。
编辑:对于那些建议提琴手的人。我已经使用该工具来获取 POST 的字段名称。 我特别想通过命令行通过类似于以下解决方案的方式获取此信息(不幸的是,正则表达式不正确,但对于熟悉正则表达式的人来说,我会知道我正在尝试做什么:
$r.RawContent| sls -Pattern "(\<(input|select|textarea) name\=[""'])(?:(?=(\\?))\2.)*?\1" -allmatches | %{$_.matches} | %{$_.value}