用wget模仿web表单

时间:2017-08-08 18:11:58

标签: javascript forms

网站有一个由aspx支持的网络表单。我们正在尝试使用bash或perl与wget模仿填写并提交webform。这意味着制作www.thatsite.com/someform.aspx?a=b&c=d形式的网址,该网址将使网站返回结果,就像我们手动输入数据一样。

webform的提交按钮来源如下所示:

<input type="submit" name="ctl00$ContentPlaceHolder2$btnSearch"
 value="Search" onclick="javascript:WebForm_DoPostBackWithOptions(new
 WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder2$btnSearch&quot;,
 &quot;&quot;, true, &quot;CriteriaGroup&quot;, &quot;&quot;, false, 
 false))" id="ContentPlaceHolder2_btnSearch" />

在JS控制台中,我们尝试了调用__DoPostBack()的DoPostBackWithOptions():

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

如果在表单中填写了值,则可以使用Chrome开发人员工具中的javascript控制台:

__doPostBack(new 
WebForm_PostBackOptions("ctl00$ContentPlaceHolder2$btnSearch", 
"", true, "CriteriaGroup", "", false, false).eventTarget, new
WebForm_PostBackOptions("ctl00$ContentPlaceHolder2$btnSearch", "", true,
"CriteriaGroup", "", false, false).eventArgument) 

我们无法弄清楚如何准确查看从theForm.submit()发送回服务器的网址。

编辑:我发现我们需要wget --postdata="a=b&c=d",而不是我上面描述的get语法。仍然需要查看帖子数据是什么。

2 个答案:

答案 0 :(得分:0)

使用Chrome(或Safari或Firefox)Web检查器检查使用JavaScript提交表单时提交给服务器的值。一旦你看到了,你就可以在你的剧本中复制它了。

答案 1 :(得分:0)

您可以使用Chrome开发者工具来获取该请求。转到网络选项卡并确保启用日志记录,而不是在网页上提交表单,它应该在那里记录(可能)POST请求。右键单击并复制 - &gt;作为CURL:

copy as curl

如果在提交后清除了网络窗格,则可能需要启用Preserve log复选框