gpt4 book ai didi

jquery - Powershell 调用-WebRequest ...|选择 -ExpandProperty 输入字段(并非所有 "inputfields"都显示)

转载 作者:太空宇宙 更新时间:2023-11-04 13:19:33 25 4
gpt4 key购买 nike

如果一直使用以下命令行来查询简单的 Web 表单,以识别进行后续表单 POST 所需的所有输入字段。然而,我只是遇到了一个相对简单的网络表单,它有两个输入字段,下面的命令无法识别它们:

Invoke-WebRequest 'http://URI.com/index.aspx' -WebSession $Save | 
select -ExpandProperty inputfields | select name, value

..

在下面的 HTML 源代码示例中,上述命令将识别具有“输入名称”的所有内容(在下面的 html 中显示);但是,不是其他输入类型;例如,“选择”、“文本区域”。我想知道可以识别下面 HTML 源代码示例中所示的 ALL 输入字段类型的“the”命令行;以及通过 Powershell Invoke-WebRequest POST 表单所需的任何其他不可预见的输入类型。

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。有人可以确认我可以简单地发布与我第一次开始网络 session 时收到的相同的 VIEWSTATE 和 EVENTVALIDATION 值吗?当网络 session 开始时,它们很容易存储在变量中。因此,希望在我执行 POST 时这些值可以保持原样。

编辑:对于那些建议 Fiddler 的人。我已经使用该工具获取 POST 的字段名称。 我特别想通过命令行通过类似以下解决方案的方式获取此信息(不幸的是,正则表达式不正确,但对于了解正则表达式的人来说我们会知道我正在尝试做什么:

$r.RawContent| sls -Pattern "(\<(input|select|textarea) name\=[""'])(?:(?=(\\?))\2.)*?\1" -allmatches | %{$_.matches} | %{$_.value}

最佳答案

selecttext 区域不是输入字段 according to the spec .

对于您正在做的事情,我建议您获取 Fiddler ,启动它并监视您在浏览器中手动执行的 POST。提交表单后,转到 Fiddler 并找到 session 并查看原始请求。如果它是一个帖子,它将有一个看起来像这样的正文:

usrname=keith&comment=some+pig.

将该信息作为您传递给 Invoke-WebRequest -Body 参数的正文,例如:

$wr = Invoke-WebRequest http://URI.com/index.aspx -WebSession $Save -Method Post `
-Body @{'MainPage$CountryDropDownList'="United States";'MainPage$DescribeHere'="some text"}

只需将字段附加到此哈希表即可。如果字段名称包含 $,则必须在名称周围加上单引号,否则不需要引号,例如-正文@{username="john";age="42"}

这是我们提供的用于发送到 NetGear 交换机以启用/禁用端口的 body 字符串:

$portStateBody = "unit_no=1&java_port=&inputBox_interface1=&portDesc=&adminMode=${PortState}&physicalMode=Auto&auto_power_down=Disable&short_cable=Disable&linkTrap=Enable&frameSize=1518&CBox_1=checkbox&inputBox_interface2=&submt=16&cncel=&err_flag=0&err_msg=&selectedPorts=g${PortNumber}%3B&multiple_ports=1"

注意 PowerShell 变量 ${PortState}${PortNumber}。该文本实际上是从 Fiddler 的原始请求选项卡中复制/粘贴出来的,然后我在需要的地方替换了前面提到的 PowerShell。

如果你真的想对这些元素的原始 HTML 进行正则表达式,试试这个:

sls -inp $wr.RawContent -pattern '(?is)<(input|select|textarea)\s+.*?(?:id|name)\s*=\s*"([^"]+)"' -AllMatches | Foreach {$_.Matches} | Foreach {"Element: $($_.Groups[1].value) key: $($_.Groups[2].value)"}

关于jquery - Powershell 调用-WebRequest ...|选择 -ExpandProperty 输入字段(并非所有 "inputfields"都显示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com