Bash脚本自动化ASP.NET表单提交?

时间:2012-05-07 17:19:25

标签: asp.net macos bash post curl

场景:我有一个内部ASP.NET站点,允许我维护一组规则(CRUD)。要添加新规则,我只需填写HTML表单并单击“提交”。我目前的问题是我现在需要添加几百个规则,并且我想使用脚本来自动执行此操作。

初步计划

  • 创建一个脚本,该脚本可以使用X个参数并使用这些参数伪造上述网页的表单提交
  • 创建逗号分隔文件(或类似文件),每个规则一行,每列代表HTML表单中的一个输入标记
  • 创建另一个脚本,该脚本可以使用逗号分隔文件为每一行执行一次form-submittal脚本

我的尝试以 curl 为中心,并且与online testing page相得益彰。不幸的是,我无法让它与ASP.NET页面一起工作,我猜这必须对Postback和/或Viewstate做一些事情。

curl -s -u "DOMAIN\user:password" --ntlm -d "key1=value1" -d "key2=value2" http://internal/page.aspx

(返回页面就像使用GET一样,没有错误消息)

问题

如何欺骗我发送 Postback 的ASP页面? (也欢迎备用脚本建议)

修改

来自ASP页面的

片段:

<asp:LinkButton ... runat="server" OnClick="lbAddRule_Click" PostBackUrl="~/Page.aspx" />

代码背后的片段:

protected void lbAddRule_Click(object sender, EventArgs e) {
  if (Page.IsValid == true) {
    AddRule(x,y,z);

2 个答案:

答案 0 :(得分:2)

采用完全不同的方法,您是否考虑过编写浏览器本身的脚本?有一些非常强大的技术,包括Selenium / WebDriver [1]和iMacros [2],它们都允许这种脚本。

[1] http://seleniumhq.org/docs/03_webdriver.html

[2] http://wiki.imacros.net/Browser_Automation

答案 1 :(得分:1)

如果这是一个RESTful服务(您正在访问它),您可能需要考虑将当前处理该表单的页面重写为Web Service。然后,您可以使用curl访问所有您想要的内容,并重新连接您的表单,以便一切正常。