我正在尝试自动提交网络表单(主要是为了更好地学习Powershell)。
我做的第一件事是使用Fiddler2来查看发送的EXACT webform字段(和相应的值)(使用常规Web浏览器提交数据)。
然后,我在下面的Powershell脚本中重新创建了我在Fiddler的WebForm选项卡中看到的所有可能的字段和值;我包括__VIEWSTATE,__ EVENTVALIDATION(以及我从websession开始时抓取的值)。我包括没有值的字段(与我在提琴手中看到的相同)。我甚至包括了提交按钮(因为我也在Fiddler中看到过)。
不幸的是,在使用我的脚本POST所有字段之后;当我查看$ response.rawcontent(如下面的脚本所示)时,它仍然在我开始的同一个网页上。如果我使用我的网络浏览器提交表单,它会使用新信息更新页面。我想知道我做错了什么或错过了什么。我最初尝试POST该表单没有任何以__开头的字段但是,这不起作用。
PS:当通过网络浏览器提交表单时,我还有两个灰色字段(并用我的姓名和电子邮件地址填写)。然而,有趣的是,我在Fiddler看不到这两个领域。我猜它们可能是通过__VIEWSTATE或__EVENTVALIDATION编码数据提交的?
非常感谢你帮助我!
$UserAgent = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'
$r=Invoke-WebRequest -Uri 'http://website.com/RTR/xl/requestform.aspx' -UseDefaultCredentials -SessionVariable RequestForm
$fields = Invoke-WebRequest -Uri 'http://website.com/RTR/xl/requestform.aspx' -WebSession $RequestForm | select -ExpandProperty inputfields | select name, value
$viewstate = $fields | ?{$_.name -match "VIEWSTATE"} | select -ExpandProperty value
$eventvalidation = $fields | ?{$_.name -match "EVENTVALIDATION"} | select -ExpandProperty value
#Same exact fields and values seen in Fiddler; even in the same order:
$form.Fields["__EVENTTARGET"] = ""
$form.Fields["__EVENTARGUMENT"] = ""
$form.Fields["__VIEWSTATE"] = $viewstate
$form.Fields["__EVENTVALIDATION"] = $eventvalidation
$form.Fields["xl$phone"] = "917-471-6784""
$form.Fields["xl$form$Submit"] = "Submit"
$response = Invoke-WebRequest -Uri 'http://website.com/RTR/xl/requestform.aspx' -WebSession $RequestForm -Method POST -Body $form.Fields -ContentType 'application/x-www-form-urlencoded'
$response.rawcontent | out-file $home\response.html
答案 0 :(得分:1)
如果html表单名称字面上是xl$phone
,请记住,在双引号字符串中,手机会查找名为$ phone的变量。它可能不存在,您的字段名称将只是“xl”。因此,请使用单引号字符串,例如'xl$phone'
。