在 asp.net 页面上自动提交表单

Posted

技术标签:

【中文标题】在 asp.net 页面上自动提交表单【英文标题】:auto submit a form on an asp.net page 【发布时间】:2012-02-28 22:34:37 【问题描述】:

我想创建一个应用程序(在 .Net 中)填写并提交表单(在 asp.net 网站中)。

此应用程序应读取页面,找到字段(输入),提取我要填写的字段的名称/ID,并将页面提交给服务器。

我不想要一个拥有网络浏览器控件并在其上自动导航的应用!

我有什么:我有下载 html 的部分,我有找到字段并提取其名称/ID 的部分。

我需要什么:一种将表单提交到服务器的方法(POST,而不是 GET)。

在页面的 html 上,提交是通过 javascript 完成的,如下所示:

javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "", true, "", "", false, false))

问题是:这种情况下如何提交?

【问题讨论】:

我会改为使用HttpWebRequest 类来检索和发布数据。 codeproject.com/Articles/6554/… @Zelter Ady:你知道watin.org。 【参考方案1】:

您可以使用HttpWebRequest/HttpWebResponse 对象向服务器发送/接收 HTTP 请求。收到响应后,查找要修改的各种 INPUT 字段,并使用各种字段构建 POST 请求数据块,例如

firstname=Joe&lastname=Doe&...

然后将此作为 POST 请求发送。您还需要构建一组适当的标头来模拟发送请求的真实浏览器,否则站点可能会拒绝正确处理。

您可以使用 Fiddler 首先导航到该站点并将请求保存在 Firefox 中,然后使用来自这些请求的信息来构建您的 HttpWebRequest 对象。

HttpWebRequest 可在同步和异步模式下工作,因此您可以使用几行代码下载页面,也可以控制整个下载过程。

【讨论】:

谢谢。我会尝试使用 Fiddler,也许这会帮助我构建请求。 @ZelterAdy Fiddler 在顶部有请求块,它将为您提供浏览器在 Fiddler 记录请求时随请求发送的所有标头。当您获取标头时,您必须将它们添加到请求对象的标头集合中,但其中一些不能作为键/值对添加 - 必须将它们设置为请求对象的属性.例如,UserAgent 不能作为标头添加 - HttpWebRequest 具有您必须设置的 UserAgent 字符串属性。【参考方案2】:

您可以使用 javascript 提交:

<script type="text/javascript">
  document.forms["your_form_id"].submit();
</script>

【讨论】:

【参考方案3】:

您可以在页面加载后放入 javascript 以提交表单。

document.forms[0].submit();

假设您在页面上只有一个表单,否则您可以将表单的名称放在forms[] 括号内的引号中。

【讨论】:

我不能用这个。正如我所说,我不使用浏览器来呈现代码,我只需要一个自动化工具来提交数据!【参考方案4】:

我是否正确地说带有表单的页面不属于您的网站,并且您正在阅读外部网站上的某些表单?

如果您拥有所有字段,您是否还可以读取表单标签上的“操作”属性并使用您已经获得的所有键/值执行 POST 到同一位置?

您可以在服务器端代码中使用HttpWebRequest 来执行此操作,然后以这种方式发送 POST 数据。

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

【讨论】:

以上是关于在 asp.net 页面上自动提交表单的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 支付表单提交需要指导

asp.net 表单数据提交,常见方式与错误总结

ASP.NET 表单自动保存

asp 提交表单和上传文件

提交表单后在 ASP.NET MVC 中。它没有重定向到其他页面。它加载相同的页面

如何多次提交表单(asp.net core razor)